如何将枚举 0 映射到休眠状态以获取字符串标识符
How to map Enum 0 on hibernate for a String identifier
我对枚举值的映射有疑问。
在我的 Bonus.class 中,我有枚举 属性 类型和枚举 class BonusType。
这就是我定义我的枚举 class 的方式(只是枚举定义,没有方法或构造函数被复制):
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 中的类型列table 是一个 VARCHAR2。
现在我的问题是:hibernate 是否将 0 解释为数字?我该如何解决这个问题?
如果您不能使用 AttributeConverters (baeldung jpa attribute converters),您可以在 bean 中使用相同的方法。
在你的 class "Bonus":
- 创建一个字符串类型的新字段,例如dbEavType
- 将这个新字段映射到数据库列 "type"
- 实现此新字段的设置和获取,使字符串值适应 EavType 的枚举值,进行预期的转换(例如,如果在 dbEavType 中设置“0”,则在 eavType 字段中设置 NOTVALID)
此解决方案允许您根据需要调整值,并且不会破坏可以继续使用枚举的应用程序的其他层。
我对枚举值的映射有疑问。 在我的 Bonus.class 中,我有枚举 属性 类型和枚举 class BonusType。 这就是我定义我的枚举 class 的方式(只是枚举定义,没有方法或构造函数被复制):
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 中的类型列table 是一个 VARCHAR2。
现在我的问题是:hibernate 是否将 0 解释为数字?我该如何解决这个问题?
如果您不能使用 AttributeConverters (baeldung jpa attribute converters),您可以在 bean 中使用相同的方法。 在你的 class "Bonus":
- 创建一个字符串类型的新字段,例如dbEavType
- 将这个新字段映射到数据库列 "type"
- 实现此新字段的设置和获取,使字符串值适应 EavType 的枚举值,进行预期的转换(例如,如果在 dbEavType 中设置“0”,则在 eavType 字段中设置 NOTVALID)
此解决方案允许您根据需要调整值,并且不会破坏可以继续使用枚举的应用程序的其他层。