我不想用Roo在两张或更多桌子上生成一个查找器。 示例诊所我想要添加一个查找器,让所有拥有一个具有给定名字的宠物或所有拥有给定名称的所有者的宠物。
这可能在Roo?
答案 0 :(得分:2)
Spring Roo提供了一个finder
命令,允许您在存储库界面中包含新的查找程序。当Spring Data Jpa在界面中检测到这些方法时,它使用方法名称来创建查询。检查:
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation
但是,您要创建的查询包含关系,并且使用命名查询不支持该查询,因此您需要使用 QueryDSL 来构建自己的查询。请按照以下步骤操作:
public List<Owner> findAllByPetName(String name);
界面中创建新方法OwnerRepositoryCustom.java
。在OwnerRepositoryImpl.java
类中实现上述方法,如下所示:
public List<Owner> findAllByPetName( String name ) {
QOwner owner = QOwner.owner;
QPet pet = QPet.pet;
JPQLQuery<Owner> query = from( owner )
.leftJoin( owner.pets, pet)
.fetchJoin()
.where( pet.name.eq( name ) );
applyOrderById( query );
return query.fetch();
}
正如您所看到的,使用QueryDSL非常容易实现您自己的查询。使用Pet存储库重复上述步骤,以获取分配给具有特定名称的所有者的所有宠物。
在此处查看有关QueryDSL的更多信息:
希望它有所帮助。