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