如何在 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 查询?

无法在本机查询 Spring Boot 中使用“LIKE”

使用带有 LIKE 的 mysql 本机查询的 spring boot 搜索返回空

Spring Boot JPA - 本机查询双撇号上的 SQL 错误

未绑定命名参数:Spring Boot 中的 DATE_FORMAT 本机查询

在 Spring Boot 中向本机查询添加参数会导致“org.hibernate.exception.SQLGrammarException”,