hibernate - 如何使用字段将属性注释为枚举
如何映射其中包含字段的枚举?
public enum MyEnum{
HIGHSCHOOL ("H"), COLLEGE("C")
private int value;
public MyEnum getInstance(String value){...}
}
@Entity
public class MyEntity {
@Enumerated(...)
private MyEnum eduType;
}
如何注释以便值 H、C 将保留在数据库中?如果我保留 @Enumerated(EnumType.STRING),HIGHSCHOOL 而不是 H 将存储在数据库中。如果我使用EnumType.ORDINAL
,则 1 而不是 H 将存储在数据库中。请提出解决方案。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Hibernate 中没有内置方法可以执行此操作。您可以将 UserType 写入如果你愿意的话,可以为你做到这一点。
这是一个好的开始,但您需要替换
nullSafeSet()< /code> 和
nullSafeGet()
实现来存储您的枚举代码(例如“H”/“C”/您有什么)并基于它返回正确的枚举实例。如果您有多个枚举类型需要执行此操作,您可以实现 ParameterizedType 接口,将枚举类型作为参数传递,或使用反射来检索“代码”,只要访问器方法的命名一致即可。
There's no built-in way to do this in Hibernate. You can write a UserType to do that for you if you want.
This is a good start, but you'll need to replace
nullSafeSet()
andnullSafeGet()
implementations to store your enum code (e.g. 'H' / 'C' / what have you) and return proper enum instance based on it.If you have more than one enum type you need to do this for, you can implement ParameterizedType interface to pass enum type as parameter or use reflection to retrieve the "code" as long as accessor methods are named consistently.
感谢 ChssPly76 提供的解决方案。我实现了一个用户类型并且运行良好。事实上,hibernate 社区中有一个例子可以将值/令牌保存在枚举中。 点击此处:StringValuedEnum
Thank you ChssPly76 for the solution. I implemented a user type and it works well. In fact, there is an example in the hibernate community to persist the value/token in the enum. Click here: StringValuedEnum