gpt4 book ai didi

java - 如何使用 Hibernate 将 Postgres _INT8 映射到 Java 实体?

转载 作者:行者123 更新时间:2023-11-29 12:38:11 27 4
gpt4 key购买 nike

有一个使用 SQL DDL 脚本创建的表,其中有一列类型为 _INT8。如果我尝试将它映射到 long(即 Postgres INT8),它会抛出到堆栈的末尾。

Caused by: org.hibernate.HibernateException: Wrong column type in [schme_name].[table_name] for column [column_name]. Found: _int8, expected: int8
at org.hibernate.mapping.Table.validateColumns(Table.java:373)
at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1265)
at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:155)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:508)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1750)
at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:94)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:920)

如果我尝试将其映射到 long[](或任何其他数组类型)而不是 Found: _int8, expected: bytea

如何使用 Hibernate 将 Postgres 的 _INT8 映射到 Java 类型?

最佳答案

_int8 是类型 int8[] 的内部别名,即长整数数组。

我不知道为什么要使用下划线前缀,这太可怕了,但它实际上应该只在服务器内部可见,所以我很惊讶你看到它出现在消息中。以此为例,服务器将 bigint[] 显示为消息中的列类型:

http://sqlfiddle.com/#!12/61bc5/1

如果你想在 Hibernate 中映射它,你必须将它映射为 long[],如果 Hibernate 甚至支持 SQL 数组 - which it does not appear to .您可能必须 add your own UserType implementation that uses the JDBC support for SQL arrays . Another example on the Hibernate forums .它seems to be a bit of an FAQ ,但是就像 Hibernate/JPA 中的大多数东西一样,您会发现,一旦您尝试使用除最基本的数据库功能之外的任何东西,您就会用头撞砖墙。

关于java - 如何使用 Hibernate 将 Postgres _INT8 映射到 Java 实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17748130/

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