作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 Hibernate 应用程序中,我想将 Java 枚举映射到 Postgresql 枚举,反之亦然。
我的应用程序正在使用 apache-thrift、hibernate/JPA(用于 ORM 模型)、postgresql 数据库。
Postgresql DB 已经使用命令定义了枚举
CREATE TYPE status_enum AS ENUM ('UNDER-CONSTRUCTION', 'CLOSED', 'OPEN')
DB 有一些数据,最初很少有元组处于“ build 中”状态。
这是我的解决方案:
枚举映射的自定义类型:
public class PsqlEnum extends EnumType {
@Override
public void nullSafeSet(final PreparedStatement st, final Object value, final int index,
final SharedSessionContractImplementor session) throws SQLException {
if(value == null) {
st.setNull( index, Types.OTHER );
}
else {
st.setObject(
index,
value.toString(),
Types.OTHER
);
}
}
}
ORM( hibernate )模型的实体:
@Entity
@Table(name = "place")
@TypeDef(
name = "pgsql_enum",
typeClass = PsqlEnum.class
)
public class Place implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id",nullable = false)
@Getter @Setter private Integer id;
@Column(name = "name")
@Getter @Setter private String name;
@Getter
@Setter
@Enumerated(EnumType.STRING)
@Type(type = "pgsql_enum")
@Column(name = "status_level",columnDefinition = "status_enum")
private STATUS status;
}
枚举类:
public enum STATUS{
CLOSED("CLOSED"),
UNDERCONSTRUCTION("UNDER-CONSTRUCTION"),
OPEN("OPEN");
private final String label;
Exposure(String label){
this.label = label;
}
public String getLabel() {
return label;
}
public static STATUS fromLabel(String label){
for(STATUS currentEnum:STATUS.values()){
if(currentEnum.getLabel().equals(label)){
return currentEnum;
}
}
return null;
}
@Override
public String toString() {
return this.label;
}
}
它在插入操作上工作正常,而在检索数据时抛出错误:java.lang.IllegalArgumentException: Unknown name value [UNDER-CONSTRUCTION] for enum class
我在 StackOverflow 中尝试了所有给定的引用解决方案,但没有人能很好地解决我的问题。
最佳答案
Hibernate 在序列化枚举字段的值时使用 Enum
的函数 name()
,在序列化枚举字段的值时使用 Enum.valueOf(...)
是反序列化实体。
这就是为什么你不能在值中使用 "UNDER-CONSTRUCTION"
关于java - 如何使用 Hibernate/JPA 将 JAVA 枚举映射到 Postgresql 枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47014957/
我是一名优秀的程序员,十分优秀!