我得到了一个包含状态列的实体。存储在数据库中的状态是 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/