java - 使用 Hibernate 的不区分大小写的枚举映射

标签 java hibernate enums mapping

我得到了一个包含状态列的实体。存储在数据库中的状态是 Activity 的和非 Activity 的(以及更多)。我给自己写了一个像下面这样的枚举

public enum State {

    ACTIVE("active"), INACTIVE("inactive");

    private String state;

    private State(String state) {
        this.state = state;
    }

}

实体看起来像:

@Entity
@Table(name = "TEST_DB")
public class MyEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "ID")
    private Integer id;
    @Enumerated(EnumType.STRING)
    @Column(name = "STATE", nullable = false)
    private Integer state;

    // constructor, getter, setter

}

不幸的是,我收到以下错误消息:

javax.ejb.EJBTransactionRolledbackException: Unknown name value [active] for enum class [state]

是否可以对枚举进行不区分大小写的 hibernate 映射?

最佳答案

我遇到了类似的问题并找到了简单的答案。

你可以这样做:

@Column(name = "my_type")
@ColumnTransformer(read = "UPPER(my_type)", write = "LOWER(?)")
@Enumerated(EnumType.STRING)
private MyType type;

(您不需要在 @ColumnTransformer 中进行“写入” - 对我来说这是为了向后兼容,因为我的行只有小写字母。没有 write Hibernate 将在相同的情况下编写枚举,如枚举常量中的代码)

关于java - 使用 Hibernate 的不区分大小写的枚举映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33254503/

相关文章:

java - 如何获取CloudFoundry MySQL连接参数?

java - Android Volley RxJava - 多个请求

java - 使用 ORMLite 将枚举集合存储在数据库中

java - 使用Android Studio从assets文件夹将html文件加载到android上的webview

java - 我可以将 CSS 应用于 swing 文本组件吗?

sql - 如何选择HQL中是否存在行

java - 仅运行 JUnit 测试时 Hibernate SessionFactory 创建失败

java - JPA/Hibernate - 不需要的部分回滚和 session 处理

java - 检查枚举值索引

swift - 如何比较两个没有原始类型的枚举实例?