如何在 Spring Boot 的本机查询中使用 all(array[])?
Posted
技术标签:
【中文标题】如何在 Spring Boot 的本机查询中使用 all(array[])?【英文标题】:How can I use all(array[]) in a native query with Spring Boot? 【发布时间】:2019-12-18 11:11:11 【问题描述】:我尝试使用 all(array[])
函数使用 Spring Boot 进行本机查询,但是我无法正确完成。我不知道要传递的字符串数量,它是一个动态数量。请问各位大神能帮帮我吗?
我尝试过使用List<String>
、String[]
和String
,如下所示:
通过String
并在查询all(array[:texto])
中:没有错误,但是没有结果。
传递List<String>
并在查询中all(array[:texto])
:
org.postgresql.util.PSQLException: ERROR: operator does not exist: character varying ~~* record
Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts.
-
传递
String[]
并在查询中all(array[:texto])
:
org.postgresql.util.PSQLException: ERROR: operator does not exist: character varying ~~* bytea
Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts.
-
通过
String[]
并在查询all(array[CAST(:texto AS TEXT)])
中:没有错误,但是没有结果。
@Query(value="SELECT * FROM Tag WHERE nome ILIKE all(array[:texto])", nativeQuery=true)
public List<Tag> findPacotesByTexto(@Param("texto") List<String> texto);
已编辑:
@Entity
public class Tag
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(nullable = false)
private String nome;
@ManyToOne
@JsonIgnore
@JoinColumn(name="pacote_id")
private Pacote pacote;
Tag()
public Tag (String nome, Pacote pacote)
this.nome = nome;
this.pacote = pacote;
public long getId()
return id;
public String getNome()
return nome;
public Pacote getPacote()
return pacote;
我怎样才能做到这一点?
提前致谢。
【问题讨论】:
也分享Tag
,以防万一。
我已经添加了,谢谢
【参考方案1】:
在本机查询方法中,传递的 SQL 完全按照其编写的内容执行。而且我认为该框架无法将您的集合序列化为所需的模式all(array[?, ?, ?, ...])
。在这种情况下,您应该在传递给方法之前转换您的参数,或者将方法更改为不使用本机查询。
【讨论】:
“在传递给方法之前转换参数”是什么意思? 我的意思是传递一个集合,你应该只传递一个遵循模式 [?, ?, ...] 的字符串。 我试过这个,但它没有返回结果给我。如果我通过数据库执行相同的查询,我会得到很多结果 你试过只过滤一个元素吗? 是的,我做到了。使用一个元素我可以获得结果,但使用更多元素我总是会出错以上是关于如何在 Spring Boot 的本机查询中使用 all(array[])?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 Spring Boot JPA 执行具有 INTERVAL 子句的本机 SQL 查询?
使用带有 LIKE 的 mysql 本机查询的 spring boot 搜索返回空
Spring Boot JPA - 本机查询双撇号上的 SQL 错误
未绑定命名参数:Spring Boot 中的 DATE_FORMAT 本机查询
在 Spring Boot 中向本机查询添加参数会导致“org.hibernate.exception.SQLGrammarException”,