%Like% 在 Spring JpaRepository 中查询 List<String> 类型的属性

Posted

技术标签:

【中文标题】%Like% 在 Spring JpaRepository 中查询 List<String> 类型的属性【英文标题】:%Like% Query in spring JpaRepository for property of type List<String> 【发布时间】:2021-03-24 06:48:34 【问题描述】:

我想编写一个查询来查找包含特定字符串的记录,该字段是 在我的实体中定义为列表。

这是我的 JPA 实体:

@Entity
public class Bank extends EntityBase<Bank> 
    .
    .
    .

    @Column(name = "sms_numbers")
    @Convert(converter = StringListConverter.class)
    private List<String> smsNumbers;

   .
   .
   .

SQL 应该是这样的:

select * from banks where sms_numbers like '%2000400%'

我的存储库会是这样的:

@Repository
interface BankRepository extends RepositoryBase<Bank> 
    
    @Query("SELECT b FROM Bank b WHERE b.smsNumbers LIKE '%2000400011%'") 
    List<Bank> findReservedSmsNumbers();   

但是这段代码不起作用,因为 Bank.smsNumbers 是 List Not String 。

那我该如何解决呢?

【问题讨论】:

【参考方案1】:

在这种情况下,您可以使用本机查询而不是 jpql 所以您的存储库将是:

interface BankRepository extends RepositoryBase<Bank> 

   @Query(value = "select * from banks b where b.sms_numbers like 
   concat('%',:sNumber,'%') "  , nativeQuery = true)
   List<Bank> findReservedSmsNumbers(String sNumber);
.
.
.

【讨论】:

以上是关于%Like% 在 Spring JpaRepository 中查询 List<String> 类型的属性的主要内容,如果未能解决你的问题,请参考以下文章

Spring Data JPA Repository Method Query 用like?

Spring JpaRepository 中的 %Like% 查询

springJdbc like模糊查询,Spring namedParameterJdbcTemplate like查询

带有 LIKE 的 Spring JPA @Query

%Like% 在 Spring JpaRepository 中查询 List<String> 类型的属性

带有'like'和'or'的Spring JPA @Query where子句