Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
映射数组[]::hibernate中的整数[]_Hibernate_Hibernate Mapping - Fatal编程技术网

映射数组[]::hibernate中的整数[]

映射数组[]::hibernate中的整数[],hibernate,hibernate-mapping,Hibernate,Hibernate Mapping,在postgres中,我们可以使用以下构造创建一个整数数组类型的临时表。例如,下面的SingleTest列。通常在CTE期间使用 String sql_query = "SELECT ARRAY[]::INTEGER[] AS singleTestColumn"; 如何在hibernate原生sql查询中正确映射此列 考虑到此处描述的自定义整数数组映射 i、 我指的是InArrayType类 Query<Object[]> query = session.crea

在postgres中,我们可以使用以下构造创建一个整数数组类型的临时表。例如,下面的SingleTest列。通常在CTE期间使用

String sql_query = "SELECT  ARRAY[]::INTEGER[] AS singleTestColumn";
如何在hibernate原生sql查询中正确映射此列

考虑到此处描述的自定义整数数组映射 i、 我指的是InArrayType类

        Query<Object[]> query = session.createNativeQuery(sql_query)
                .addScalar("singleTestColumn", com.vladmihalcea.hibernate.type.array.IntArrayType.INSTANCE)
                ;


        List<Object[]> objectCollection = (List<Object[]>) query.getResultList();

Hibernate将以
开头的内容视为参数,因此您的查询将编译为:

SELECT  ARRAY[]:?[] AS singleTestColumn
您需要使用转义序列(我在Hibernate 4.3中使用了这个):

或标准SQL强制转换:

String sql_query = "SELECT  CAST(ARRAY[] AS integer[]) AS singleTestColumn";

使用Postgres的自定义类型转换将混淆Hibernate,因为它将其视为一个参数。您可以尝试
强制转换(数组[]为整数[])
数组[]\\:\\\:整数[]
@coladict您完全正确。cast操作符可以完美地处理这个星座,即“cast(数组[]作为整数[])”。请把这个作为回答,我会接受的。
String sql_query = "SELECT  ARRAY[]\\:\\:integer[] AS singleTestColumn";
String sql_query = "SELECT  CAST(ARRAY[] AS integer[]) AS singleTestColumn";