Jpa Spring数据存储库如何查询包含子字符串的字符串的ElementCollection

Jpa Spring数据存储库如何查询包含子字符串的字符串的ElementCollection,jpa,spring-data-jpa,Jpa,Spring Data Jpa,我有一个实体,其字符串@ElementCollection: @ElementCollection(fetch = FetchType.EAGER) private Set<String> names; @ElementCollection(fetch=FetchType.EAGER) 私有集合名; 虽然按名称查询没有问题: List<MyEntity> findByNames(String name); 列出findByNames(字符串名称); 如果我试图创建

我有一个实体,其字符串
@ElementCollection

@ElementCollection(fetch = FetchType.EAGER)
private Set<String> names;
@ElementCollection(fetch=FetchType.EAGER)
私有集合名;
虽然按名称查询没有问题:

List<MyEntity> findByNames(String name);
列出findByNames(字符串名称);
如果我试图创建一个带有“contains”的方法,它似乎不起作用。我想查找具有包含给定子字符串的匹配名称的实体:

List<MyEntity> findByNamesContains(String substringOfname);
列出findByNamesContains(名称的字符串子字符串);
这不会产生结果,但也不会产生错误。这里的“contains”关键字似乎被解释为名称列表应该包含的内容。如果我把它改成

List<MyEntity> findByNamesContains(List<String> substringOfname);
列出findByNamesContains(名称的子字符串列表);
这种方法有效

我的问题是:是否有一个关键字组合来获得一个方法,该方法返回名称与给定子字符串匹配的所有实体


如果不是,JPQL查询会是什么样子?

如果是单个字符串,则使用包含关键字的。其工作方式与sql查询中的“like”相同


Ref:

据我所知,不,您不能用Spring JPA日期存储库方法名称来完成,但使用
JPQL
和Spring存储库非常容易

这里是JPQL

从MyEntity e中选择e加入e.name名称,其中名称类似CONCAT(“%”,:name,“%”)

对于不区分大小写的查询,请使用以下命令

从MyEntity e中选择e加入e.names名称,其中较低的(名称)如CONCAT('%',较低的(:名称),'%')

JPQL+Spring存储库

@Query("select e from MyEntity e join e.names name where name LIKE CONCAT('%', :name, '%') ")
List<MyEntity> findByName(@Param("name") String name);
@Query(“从MyEntity e中选择e加入e.names,其中名称如CONCAT('%,:name,'%)”)
列出findByName(@Param(“name”)字符串名);

如需了解更多信息,请使用look and this,希望此帮助(:

Containing与contains具有相同的含义,因此在此处不起作用。如果名称列表包含给定名称,则匹配,但如果某些名称包含给定子字符串,则不匹配。是否编写了findByNameContaining或findByNamesContaining?我是指第一个。它仅适用于“名称”它必须与字段的名称匹配,这是“名称”。使用“名称”将产生错误:“找不到属性名称..您是指名称吗?”