我对Enum值的映射有疑问。
在我的Bonus.class中,我具有枚举属性Type和枚举类BonusType。
这就是我定义枚举类的方式(只是枚举定义,没有复制任何方法或构造函数):
public enum EavType
{
WORLDWIDE ("WORLDWIDE"),
SIMPLE ("SIMPLE"),
NOTVALID ("0");
}
到目前为止,一切都很好。就我从数据库中获得类型为“ WORLDWIDE”或“ SIMPLE”的Bonus元素而言,没有问题,但是当我在类型= 0的数据库上获得Bonus时,出现错误:
Exception: java.lang.IllegalArgumentException: Unknown name value [0] for enum class [com.bosch.gam.commons.bo.remuneration.BonusType]
问题是我无法设置NOTVALID类型的保存方式,我从数据库获取的数据是从另一个接口创建的,它们只是将其另存为0。我还应该澄清一下Bonus表中的Type列是VARCHAR2。
现在我的问题是:休眠将0解释为数字吗?我怎样才能解决这个问题?
最佳答案
如果不能使用AttributeConverters(baeldung jpa attribute converters),则可以在bean中使用相同的方法。
在您的班级“奖金”中:
创建一个类型为String的新字段,例如dbEavType
将此新字段映射到数据库列“类型”
实现此新字段的设置和获取,以使字符串值适应EavType的枚举值,以进行预期的转换(例如,如果在dbEavType中设置为“ 0”,则在eavType字段中设置NOTVALID)
该解决方案使您可以根据需要调整值,并且不会破坏可以继续使用枚举的应用程序的其他层。