gpt4 book ai didi

java - 使用 ORMLite 保存 PostgreSQL 自定义枚举数据类型

转载 作者:行者123 更新时间:2023-11-29 13:57:59 24 4
gpt4 key购买 nike

这可能是个愚蠢的问题,因为手头的问题相当初级,而且我敢肯定答案可能非常简单。尽管如此,即使经过数小时的挖掘,我仍无法找到解决问题的全面解决方案。

我将 ORMLite 与带有 Java 的 PostgreSQL 数据库一起使用。当我试图将对象持久化到映射表时,自定义的 Postgres 枚举数据类型似乎让我头疼。

这是一个情况的例子:

Java类注释如下:

@DatabaseTable(tableName = "customer")
public class Customer {

@DatabaseField(id = true)
private int id;

@DatabaseField
private String name;

@DatabaseField(dataType = DataType.ENUM_STRING)
private CustomerType customerType;
...

枚举定义如下:

public enum CustomerType{
company, private, unknown
}

Postgres 数据类型(“customertype”)被定义为具有以下值的枚举类型(在 pg_enum 和 pg_type 表中):

"company"
"private"
"unknown"

...列本身被定义为这种类型:

ALTER TABLE public.customer ADD COLUMN type customertype;

当我尝试使用 ORMLite 向客户表插入一个新行时,出现以下异常,它告诉我映射有些问题,ORMLite 似乎错误地将值作为 varchar 处理,而不是自定义枚举类型:

org.postgresql.util.PSQLException: ERROR: column "type" is of type customertype but expression is of type character varying

我对如何正确映射枚举类型感到有点困惑。我已经为数据库字段定义和其他持久规则尝试了大多数不同的数据类型,但没有成功。

很明显,我是 ORMLite 的新手,所以非常感谢所有帮助!

最佳答案

一般来说,ORM 与自定义数据库类型的配合不佳。

您可能会通过将字符串类型设置为未指定来获得一些运气;将 stringtype=unspecified 附加到您的 JDBC 参数。这告诉 PgJDBC 将 java.sql.Types.VARCHAR 类型的参数发送为 unknown 而不是默认的 text。 PostgreSQL 不会将文本隐式转换为枚举,但它从未知类型的文字转换为枚举。

在我看来,PostgreSQL 在此处的强制转换过于严格,但我还没有足够的运气让 pgsql-hackers 的相关人员相信这一点。

关于java - 使用 ORMLite 保存 PostgreSQL 自定义枚举数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27690559/

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