java - 持久化数据库枚举实例字段值而不是枚举值

标签 java hibernate enums spring-data

例如我有这样的枚举

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/

相关文章:

java - 使用套接字在 JAVA 中同时将客户端连接到多个服务器

java - 如何使用 hibernate 将一些实体的值存储在另一个表中?

java - 使用枚举类型创建的单例,线程安全问题

java hibernate ' '中的未知列 'field list'

c++ - 是否可以确定类型是否为范围枚举类型?

Java - 在自身内部使用枚举值

java - 将 Collection<String[]> 流转换为 List<String>[]

java - 使用java中的树形图查找字符串中字符的频率时出现错误

java - 如何以编程方式更改复选框选中的颜色

java - 一张表内的实体之间的继承