关于java:如何在hibernate上映射Enum 0以获取字符串标识符

How to map Enum 0 on hibernate for a String identifier

我有一个Enum值映射的问题。
在我的Bonus.class中,我有enum属性Type和枚举类BonusType。
这是我定义我的枚举类的方法(只是枚举定义,没有复制方法或构造函数):

1
2
3
4
5
6
public enum EavType
{
  WORLDWIDE ("WORLDWIDE"),
  SIMPLE ("SIMPLE"),
  NOTVALID ("0");
}

到现在为止还挺好。 至于我从DB获得"WORLDWIDE"或"SIMPLE"类型的Bonus元素没有问题,但是当我在类型为0的数据库上获得奖励时,我收到一个错误:

1
Exception: java.lang.IllegalArgumentException: Unknown name value [0] for enum class [com.bosch.gam.commons.bo.remuneration.BonusType]

问题是我无法设置如何保存NOTVALID类型,我从数据库获取的数据是从另一个接口创建的,它们只是将其保存为0.我还应该澄清Bonus表中的Type列是VARCHAR2。

现在我的问题是:hibernate将0解释为数字? 我怎样才能解决这个问题?


如果您不能使用AttributeConverters(baeldung jpa属性转换器),则可以在bean中使用相同的方法。
在你的班级"奖金":

  • 创建一个String类型的新字段,例如dbEavType
  • 将此新字段映射到数据库列"type"
  • 实现此新字段的set和get,以使字符串值适应执行预期转换的EavType的枚举值(例如,如果在dbEavType中设置"0",则在eavType字段中设置NOTVALID)

此解决方案允许您根据需要调整值,并且不会破坏可继续使用枚举的应用程序的其他层。