如何在休眠状态将Enum 0映射为字符串标识符

时间:2018-11-19 07:04:57

标签: java hibernate java-ee enums hibernate-mapping

我对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解释为数字吗?我该如何解决?

1 个答案:

答案 0 :(得分:1)

如果不能使用AttributeConverters(baeldung jpa attribute converters),则可以在bean中使用相同的方法。 在您的“奖励”课程中:

  • 创建一个类型为String的新字段,例如dbEavType
  • 将此新字段映射到数据库列“类型”
  • 通过设置和获取此新字段来使字符串值适应EavType的枚举值,以进行预期的转换(例如,如果在dbEavType中设置为“ 0”,然后在eavType字段中设置NOTVALID)

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