假设我有一个这样的实体类(为了简洁起见,代码最少):
@Entity
public class Thing {
private Long groupID;
private String name;
private String description;
}
要求是实现对name
或description
中存在的字符串值的搜索,以及对具有特定groupID
的Thing
s的搜索。我会尝试编写一个Spring Data JPA“派生”的查询方法,如以下方法之一:
public ThingRepo extends JpaRepository<Thing, Long> {
public Collection<Thing> findByGroupIDAndNameContainsOrDescriptionContains(Long groupID, String name, String description);
public Collection<Thing> findByNameContainsOrDescriptionContainsAndGroupID(String name, String description, Long groupID);
}
要在name
或description
中搜索相同的文本,我会为两个方法参数传递相同的值。然而,这两个都没有产生预期的结果,因为Spring Data如何处理方法名称中的逻辑And
和Or
运算符-我找不到任何方法将name
和description
条件与逻辑Or
分组。
有没有一种方法可以实现这样的查询方法,而不需要求助于JPQL和@Query
?
2条答案
按热度按时间56lgkhnf1#
findByGroupIDAndNameContainsOrDescriptionContains(...)
的计算结果为(A∧B)∨C
,但如果我理解正确,您需要A∧(B∨C)
,它相当于(A∧B)∨(A∧C)
,因此应该是其中
name=description
和groupId1=groupId2
。ltqd579y2#
优先顺序是And then Or,就像Java一样。您可能必须沿着
name
和groupid
或description
和groupid
这行做一些事情,这意味着名称和组ID匹配或描述和组ID匹配。因此,您的方法可以命名为: