- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 PostgreSQL 中有以下架构
student_master(
enroll_id varchar(6),
name varchar(25),
class class_enum
)
这里,class_enum 是使用创建的枚举
create type class_enum as enum('1','2','3')
现在,我正在 Java 中创建一个模型类,以使用 hibernate 连接到数据库。最初,我声明了一个具有字符数据类型的“类”列,但出现了以下异常
org.postgresql.util.PSQLException:错误:列“class”的类型为class_enum,但表达式的类型为字符变化
我应该使用什么类型来将 Java 类中的变量与 PostgreSQL 列类型相匹配?
最佳答案
最好的方法是在Java端也提供enum,并让hibernate知道如何在db值和java之间进行转换。
参见The best way to map an Enum Type with JPA and Hibernate
To map this PostgreSQL type we can no longer use the default Hibernate-specific org.hibernate.type.EnumType because PostgreSQL expects an Object type, not a VARCHAR or an INT.
Luckily, we can easily create a custom Type by extending org.hibernate.type.EnumType
public class PostgreSQLEnumType extends org.hibernate.type.EnumType {
public void nullSafeSet(
PreparedStatement st,
Object value,
int index,
SharedSessionContractImplementor session)
throws HibernateException, SQLException {
st.setObject(
index,
value != null ?
((Enum) value).name() :
null,
Types.OTHER
);
}
}
在您的情况下,由于值 (1, 2, 3) 不是有效的枚举标识符,您可以在枚举中添加一个私有(private)字段并使用它来代替 name()
关于java - 在 Java 中,Postgres 中带有枚举的列应使用什么类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60913068/
我是一名优秀的程序员,十分优秀!