在运行时从 db 枚举为 jpa 枚举生成值

Posted

技术标签:

【中文标题】在运行时从 db 枚举为 jpa 枚举生成值【英文标题】:Generate values from db enum for jpa enum at runtime 【发布时间】:2013-06-24 02:17:17 【问题描述】:

我在互联网上看到了将 postgresql 枚举映射到 java 枚举的方法。但是当我修改数据库中的枚举时,我所看到的所有方法都表现不佳。我想要做的是在运行时通过查询数据库或类似的东西来创建java枚举值。最好如何进行? 例如在数据库中我有枚举 'a','b','c','d' 并且有一天我设法将它在数据库中更改为 'a','x','d' ,'e'。有什么好的方法可以确保我不会在 java 中遇到 enum 的一致性问题。(显然手动更新是我的最后选择)。如果重要的话,我使用的是 9.1 之前的 pg 数据库

【问题讨论】:

【参考方案1】:

如果您要更新枚举定义,那么您不应该使用枚举。使用带有外键引用的查找表。

枚举确实适用于您不希望枚举发生变化的情况,以及当它们发生变化时您准备做重要工作的情况。在这种情况下,如果您更改枚举的定义,则必须更新所有使用该枚举的代码是完全合理的。

【讨论】:

以上是关于在运行时从 db 枚举为 jpa 枚举生成值的主要内容,如果未能解决你的问题,请参考以下文章

枚举的独特强大之处

使用JPA将嵌套枚举保存到db

是否可以为JPA编写通用枚举转换器?

在枚举该数组时从数组中删除元素

使用固定值映射 JPA 中的枚举?

在枚举字段(DB)中插入字符串值(java)时获取“列的数据被截断”