例如我有这样的枚举
public enum Season {
WINTER(1), SPRING(10), SUMMER(50), FALL(100);
private int expectedVisitors;
private Season(int expectedVisitors) {
this.expectedVisitors = expectedVisitors;
}
public int printExpectedVisitors() {
return expectedVisitors;
}
}
而Season是一种存储在数据库中的文件类型。
@Column(name = "season")`
@Enumerated(EnumType.STRING)
private Season season;
但是我需要存储 int 1/10/100 而不是 value Winter。我应该写什么?有可能做这样的事情吗?
最佳答案
这可以通过使用自定义用户类型来完成,我们已经做了很多。
关于这方面的教程有很多,例如这是一个快速谷歌搜索得出的结果:http://www.gabiaxel.com/2011/01/better-enum-mapping-with-hibernate.html
有一件事你可能想做不同的事情:你可以在一些包中使用 package-info.java 而不是在你的每个枚举上使用 @Type
(我们正在使用包定义用户类型的位置)并像这样注释包:
@TypeDefs( {
@TypeDef( name = "SeasonUserType", typeClass = SeasonUserType.class, defaultForType = Season.class )
})
package your.package;
//a few imports here
您的实体将仅包含以下内容:
@Column(name = "season")
private Season season;
关于您的枚举的最后一个想法:看起来您想将 expectedVisitors
写入数据库,并在读取时使用它将该数字映射回枚举值。虽然这适用于用户类型,但我认为这是一个设计缺陷,因为访问者的数量可能不是一个季节的安全标识符(而且它可能会改变,所以它可能根本不应该是硬编码的)。
关于java - 持久化数据库枚举实例字段值而不是枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45837227/