Java 如何使用查询运算符&&;或@>;在hibernate中创建本机查询时 final Query Query=em.createNativeQuery(“从posts中选择postid,其中:properties

Java 如何使用查询运算符&&;或@>;在hibernate中创建本机查询时 final Query Query=em.createNativeQuery(“从posts中选择postid,其中:properties,java,postgresql,hibernate,jpa,Java,Postgresql,Hibernate,Jpa,),假设您具有以下设置: 创建表TST\U POST ( posted int, 属性varchar(200)[], 主键(posted) ); 插入TST_柱中 值(1,{“aaa”,“bbb”}'),(2,{“aaa”,“ccc”}'),(4,{“ddd”,“ccc”}'); 您可以编写以下查询: import org.hibernate.jpa.TypedParameterValue; 导入com.vladmin.hibernate.type.array.StringArrayType;

),假设您具有以下设置:

创建表TST\U POST
(
posted int,
属性varchar(200)[],
主键(posted)
);
插入TST_柱中
值(1,{“aaa”,“bbb”}'),(2,{“aaa”,“ccc”}'),(4,{“ddd”,“ccc”}');
您可以编写以下查询:

import org.hibernate.jpa.TypedParameterValue;
导入com.vladmin.hibernate.type.array.StringArrayType;
// ...
列表结果=entityManager

.createNativeQuery(“从TST_POSTS中选择postid,其中:prop列“属性”是什么类型的”?类型为varchar(100)[]添加强制转换时,错误消息肯定已更改?请复制并粘贴确切的错误消息,原因是:org.postgresql.util.PSQLException:错误:无法将type bytea强制转换为文本[]位置:44也许答案中的一个会有帮助吗?这里讨论的选项是传入一个字符串,如
“{'a','b','c'}”
,并转换为数组,或者使用
setParameter(“properties”,newTypedParameterValue(StringArrayType.INSTANCE,propAux))
您可以使用类似
选择pg_类型(:properties)的东西
查看绑定内容。是的,我有一个类似的设置。我将编辑帖子并添加它,以便您可以看到。我按照您的建议做了。但出于某种原因,它从数据库中读取我的varchar(100)[]作为bytea,我得到以下错误:由以下原因引起:org.postgresql.util.psqleexception:错误:无法将type bytea转换为text[]位置:44问题显然来自cast(属性为text[])。我也没有hibernate版本。我有5.1.0.Final版本。1.为什么使用5.1.0.Final而不是5.4 branch的最新版本?2.你使用什么hibernate方言?显然我试着取消cast()但仍然有相同的错误。因此,可能错误确实来自于在TypedParameterValue函数中强制转换它?我使用5.1.0.Final,因为其他东西依赖于它,无法更改它,因为它们都断开了。即使我去掉TypedParameterValue(),它仍然会给我相同的错误。我真的不知道该怎么做了哈哈

CREATE TABLE IF NOT EXISTS posts(
    postid SERIAL NOT NULL,
    owner SERIAL NOT NULL,
    title VARCHAR(100) UNIQUE NOT NULL,
    message VARCHAR(500) NOT NULL,
    continent VARCHAR(100) NOT NULL,
    country VARCHAR(100) NOT NULL,
    state VARCHAR(100) NOT NULL,
    languages VARCHAR(100)[] NOT NULL,
    properties varchar(100) ARRAY NOT NULL,
    PRIMARY KEY (postid),
    FOREIGN KEY (owner) REFERENCES users(userid) ON DELETE CASCADE
);
2
4