java - 如何将枚举 0 映射到 hibernate 状态以获取字符串标识符

标签 java hibernate jakarta-ee enums hibernate-mapping

我对枚举值的映射有疑问。 在我的 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 类型的保存方式,我从数据库中获取的数据是从另一个接口(interface)创建的,他们只是将其保存为 0。我还应该澄清 Bonus 表中的 Type 列是一个 VARCHAR2。

现在我的问题是:hibernate 是否将 0 解释为数字?我该如何解决这个问题?

最佳答案

如果您不能使用 AttributeConverters (baeldung jpa attribute converters),您可以在 bean 中使用相同的方法。 在你的类(class)“奖金”中:

  • 创建一个字符串类型的新字段,例如dbEavType
  • 将这个新字段映射到数据库列“type”
  • 实现此新字段的设置和获取,以将字符串值调整为执行预期转换的 EavType 的枚举值(例如,如果在 dbEavType 中设置“0”,则在 eavType 字段中设置 NOTVALID)

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

关于java - 如何将枚举 0 映射到 hibernate 状态以获取字符串标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53369775/

相关文章:

java - 解析 FileList 对象中的文件

java - 从 Java 运行外部程序,读取输出,允许中断

java - 编译 jitsi 项目时转换为 Dalvik 格式失败,出现错误 1

java - Selenium - org.openqa.selenium.WebDriverException : f. QueryInterface 不是函数

java - Play Framework 异常 - 字段 .. 没有默认值

java - 数据库序列如何管理竞争条件?

java - CDI 中的 session 范围是如何实现的?

java - 如何使运行 Arquillian 功能测试的 maven-failsafe-plugin 知道堆栈跟踪中的 EJB 行号

Hibernate SessionFactory 与 Service Registry

java - Apache Wink 以编程方式获取 URLPattern