如何使用 jpa 的枚举作为持久实体的数据成员?
请提供使用 enum 和 jpa 作为持久实体的数据成员的最佳实践和“如何”。 最佳做法是什么? 我想保留枚举中的“C”、“O”。 (代码)。如果这不是正确的方法,请提出建议。
枚举定义是——
public enum Status{
CLOSED ("C")
OPEN ("O")
private final int value;
private Status(final int pValue){
this.value = pValue;
}
public int value(){
return this.value;
}
Please best practice and 'how to' for using enum with jpa as a data member of persisted entity.
what is the best practice?
I want to persist "C", "O" from enum. (codes). If this is not the correct approach please suggest.
Enum defination is --
public enum Status{
CLOSED ("C")
OPEN ("O")
private final int value;
private Status(final int pValue){
this.value = pValue;
}
public int value(){
return this.value;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我们将枚举持久化为字符串。使用 @Enumerated(EnumType.STRING) 来使用字符串表示形式(而不是自动枚举代码)。这使得数据库中的数据更具可读性。
如果您确实需要将枚举映射到特殊代码(旧代码等),则需要自定义映射。首先是一个基类,它将枚举映射到数据库并返回:
现在是一个扩展,它使用 DBEnum 将枚举的值映射到数据库并返回:
接口:
最后,您必须为每个枚举扩展
DBEnumType
您想要映射的类型:在
Status
中,您必须实现将数据库代码映射到枚举的静态方法:最后,您必须使用注释
@org.hibernate.annotations.Type()< /code> 告诉 Hibernate 使用自定义映射。
结论:不要使用自定义代码。它们只是生成大量你无法分解的愚蠢的样板代码。
We persist enums as strings. Use
@Enumerated(EnumType.STRING)
to use the string representation (instead of the automatic enum code). That makes your data in the DB much more readable.If you really need to map the enums to special codes (legacy code and the like), you'll need a custom mapping. First a base class which maps enums to the DB and back:
Now an extension which uses DBEnum to map values for your enums to the DB and back:
The interface:
Lastly, you must extend
DBEnumType
for each enum type you want to map:In
Status
, you must implement the static method which maps DB codes to enums:Lastly, you must use the annotation
@org.hibernate.annotations.Type()
to tell Hibernate to use the custom mapping.Conclusion: Don't use custom codes. They just generate a lot of stupid boiler plate code which you can't factor out.
预期解决方案:
枚举定义:
}
实体定义:
expected Solution:
enum defination:
}
Entity Definition:
JPA 默认支持枚举,但问题是它们默认使用您无法控制的值的序数。
为了解决这个问题,你可以在 getter setter 上使用一些逻辑。
EnumUtils 应该进行转换...
Enums are by default supported by JPA but problem is they use the ordinals of the values by default which you cannot control.
To solve this you could use a little logic on your getter setters.
EnumUtils should do the conversion...