Spring CrudRepository如何查询父GUID在指定列表中的所有Group
问题:Spring Data JPA 如何根据parentGuid列表查询Group实体
我定义了如下Group实体:
@Entity public class Group extends Auditable<String> { private static final long serialVersionUID = 1L; private Long id; private String parentGuid; // other fields // getters/setters }
仓库定义如下:
@Repository @Transactional public interface GroupRepository extends CrudRepository<Group, String> { Group findById(String id); }
我想要获取所有parentGuid属于指定GUID列表(如List<String> listGuid = ['parent1', 'parent2', 'parent3'])的Group,期望生成的SQL为:
select * from groups where parentGuid='parent1' or parentGuid='parent2' or parentGuid='parent3';
我尝试在仓库中定义方法:
List<Group> findByGroupParentGuidIn(List<String> guids);
但出现警告“Cannot resolve property GroupParentGuid”,请问正确的查询方法应该如何构建?
解决方案
1. 修正方法名(推荐)
问题出在方法名不符合Spring Data JPA的方法名解析规则:你额外添加的Group会被解析成实体属性的一部分,但你的实体中只有parentGuid属性,并没有groupParentGuid,因此报错。
正确的方法名直接对应实体属性即可:
List<Group> findByParentGuidIn(List<String> guids);
这个方法会自动生成等价于你期望的SQL(IN逻辑和多个OR效果完全一致),最终生成的SQL为:
SELECT * FROM groups WHERE parent_guid IN (?, ?, ?);
2. 使用@Query手动指定SQL(可选)
如果你更倾向于手动控制SQL语句,也可以用@Query注解实现:
@Query("SELECT g FROM Group g WHERE g.parentGuid IN :guids") List<Group> findByParentGuids(@Param("guids") List<String> guids);
或者使用原生SQL:
@Query(value = "SELECT * FROM groups WHERE parentGuid IN :guids", nativeQuery = true) List<Group> findByParentGuidsNative(@Param("guids") List<String> guids);
内容的提问来源于stack exchange,提问作者covfefe
相关产品推荐
相关产品推荐

