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

时间:2019-04-09 08:25:45

标签: jpa spring-data-jpa

我有一个带有@ElementCollection字符串的实体:

@ElementCollection(fetch = FetchType.EAGER)
private Set<String> names;

按名称查询没问题:

List<MyEntity> findByNames(String name);

如果我尝试使用“ contains”创建方法,这似乎不起作用。我想查找具有包含给定子字符串的匹配名称的实体:

List<MyEntity> findByNamesContains(String substringOfname);

这不会产生任何结果,但也不会出错。似乎此处的“ contains”关键字被解释为名称列表应包含的内容。如果我将其更改为

List<MyEntity> findByNamesContains(List<String> substringOfname);

此方法有效。

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

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

2 个答案:

答案 0 :(得分:1)

据我所知,不可以使用Spring-JPA-Date存储库方法名称来完成此操作,但是使用JPQL和Spring存储库很容易做到

这是 JPQL

select e from MyEntity e join e.names name where name LIKE CONCAT('%', :name, '%')

对于不区分大小写的查询,请使用此

select e from MyEntity e join e.names name where LOWER(name) LIKE CONCAT('%', LOWER(:name), '%')

JPQL +春季存储库

@Query("select e from MyEntity e join e.names name where name LIKE CONCAT('%', :name, '%') ")
List<MyEntity> findByName(@Param("name") String name);

有关更多信息,请使用外观here和此answer,希望获得帮助(:

答案 1 :(得分:0)

对于单个字符串,请使用包含关键字。在SQL查询中的工作方式与“赞”相同。

参考:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#_supported_query_keywords