java - Hibernate:如何为枚举类型的列指定@ColumnDefault

标签 java hibernate spring-boot

我有一个枚举定义如下:

public enum TRAFFIC_SOURCE {
    IP, CLIENT_ID, MOBILE
}

在我的仓库中:

@Column(name = "SOURCE")
@NotNull
@Enumerated(EnumType.STRING)
private TRAFFIC_SOURCE source;

现在我想为列指定默认值。我尝试了两件事,在这两种情况下都出错了:

@ColumnDefault(TRAFFIC_SOURCE.IP)
// Error:(26, 43) java: incompatible types: com.myproj.enums.TRAFFIC_SOURCE cannot be converted to java.lang.String

@ColumnDefault(TRAFFIC_SOURCE.IP.name())
// Error:(26, 51) java: element value must be a constant expression

强制我使用

@ColumnDefault("IP")

有没有办法默认使用枚举变量?

最佳答案

因为@ColumnDefault 只接受一个字符串作为参数并且注解中的值必须是常量,所以唯一的可能是使用

@ColumnDefault("IP")

如果您没有被迫在表格列上使用默认值并且始终使用 JPA 插入数据,那么您可以像 Kapcash 所说的那样初始化该字段:

private TRAFFIC_SOURCE source = TRAFFIC_SOURCE.IP;

关于java - Hibernate:如何为枚举类型的列指定@ColumnDefault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56847157/

相关文章:

java - 同一类设计的加密/解密版本

java - @Transactional 与 Spring Data 自定义方法的使用

java - 在 REST API 中操作请求 (Spring )

java - 使用复合键的 Hibernate 查找。列名无效异常

即使在非事务方法或 Controller 中捕获异常,Spring 事务方法也会回滚

java - 如何使 Autowired 在 Configuration 类中工作?

java - 如何从可执行文件加载我的本地主机 java spring boot web 应用程序

java - Spring 中哪些类区域作为 bean 加载?

java - HikariDataSource.getConnection() 在低流量时缓慢,在大流量时快速

java - 压缩 ArrayList 方法中的错误