gpt4 book ai didi

java - 在 Java 中,Postgres 中带有枚举的列应使用什么类型?

转载 作者:行者123 更新时间:2023-12-01 17:43:07 24 4
gpt4 key购买 nike

我在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com