我有一个带有@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查询会是什么样子?
答案 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);
答案 1 :(得分:0)
对于单个字符串,请使用包含关键字。在SQL查询中的工作方式与“赞”相同。
参考:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#_supported_query_keywords