在休眠中映射 ARRAY[]::INTEGER[]
Mapping ARRAY[]::INTEGER[] in hibernate
在 postgres 中,我们可以使用以下构造来创建临时 table 类型的整数数组。例如下面的 singleTestColumn。通常这在 CTE 期间使用。
String sql_query = "SELECT ARRAY[]::INTEGER[] AS singleTestColumn";
如何在 hibernate 本机 sql 查询中正确映射此列。
考虑到此处描述的自定义整数数组映射 https://vladmihalcea.com/how-to-map-java-and-sql-arrays-with-jpa-and-hibernate/#comment-26149
也就是说,我的意思是 IntArrayType class.
Query<Object[]> query = session.createNativeQuery(sql_query)
.addScalar("singleTestColumn", com.vladmihalcea.hibernate.type.array.IntArrayType.INSTANCE)
;
List<Object[]> objectCollection = (List<Object[]>) query.getResultList();
问题是为什么以下在 hibernate 5.3.7.Final 和 org.hibernate.dialect.PostgreSQL95Dialect.
中不起作用并给出错误
o.h.e.j.s.SqlExceptionHelper : SQL Error: 0, SQLState: 42601
o.h.e.j.s.SqlExceptionHelper : ERROR: syntax error at or near ":"
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
Hibernate 将以 :
开头的内容视为参数,因此您的查询被编译为:
SELECT ARRAY[]:?[] AS singleTestColumn
您需要使用转义序列(我在 Hibernate 4.3 中使用过):
String sql_query = "SELECT ARRAY[]\:\:integer[] AS singleTestColumn";
或标准 SQL 演员:
String sql_query = "SELECT CAST(ARRAY[] AS integer[]) AS singleTestColumn";
在 postgres 中,我们可以使用以下构造来创建临时 table 类型的整数数组。例如下面的 singleTestColumn。通常这在 CTE 期间使用。
String sql_query = "SELECT ARRAY[]::INTEGER[] AS singleTestColumn";
如何在 hibernate 本机 sql 查询中正确映射此列。
考虑到此处描述的自定义整数数组映射 https://vladmihalcea.com/how-to-map-java-and-sql-arrays-with-jpa-and-hibernate/#comment-26149 也就是说,我的意思是 IntArrayType class.
Query<Object[]> query = session.createNativeQuery(sql_query)
.addScalar("singleTestColumn", com.vladmihalcea.hibernate.type.array.IntArrayType.INSTANCE)
;
List<Object[]> objectCollection = (List<Object[]>) query.getResultList();
问题是为什么以下在 hibernate 5.3.7.Final 和 org.hibernate.dialect.PostgreSQL95Dialect.
中不起作用并给出错误o.h.e.j.s.SqlExceptionHelper : SQL Error: 0, SQLState: 42601
o.h.e.j.s.SqlExceptionHelper : ERROR: syntax error at or near ":"
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
Hibernate 将以 :
开头的内容视为参数,因此您的查询被编译为:
SELECT ARRAY[]:?[] AS singleTestColumn
您需要使用转义序列(我在 Hibernate 4.3 中使用过):
String sql_query = "SELECT ARRAY[]\:\:integer[] AS singleTestColumn";
或标准 SQL 演员:
String sql_query = "SELECT CAST(ARRAY[] AS integer[]) AS singleTestColumn";