Spring Roo 2.0.0.RC1 - 如何在两个或更多表上添加查找器
Spring Roo 2.0.0.RC1 - How can i add a finder over two or more tables
我不想使用 Roo 在两个或更多表上生成查找器。
示例诊所我想添加一个查找器,让所有拥有宠物的主人或拥有给定名字的主人的所有宠物。
这在 Roo 有可能吗?
Spring Roo 提供了一个 finder
命令,允许您在存储库界面中包含新的查找器。当 Spring Data Jpa 在接口中检测到这些方法时,它会使用方法名称来创建查询。检查:
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation
但是,您要创建的查询包含一个关系,并且不支持使用命名查询,因此您需要使用 QueryDSL 来构建您自己的查询。按照以下步骤操作:
- 在
OwnerRepositoryCustom.java
接口中创建新方法 public List<Owner> findAllByPetName(String name);
。
在 OwnerRepositoryImpl.java
class 中实现上述方法,如下所示:
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 存储库重复上述步骤,以获取分配给具有特定名称的 Owner 的所有宠物。
在此处查看有关 QueryDSL 的更多信息:
希望对您有所帮助。
我不想使用 Roo 在两个或更多表上生成查找器。 示例诊所我想添加一个查找器,让所有拥有宠物的主人或拥有给定名字的主人的所有宠物。
这在 Roo 有可能吗?
Spring Roo 提供了一个 finder
命令,允许您在存储库界面中包含新的查找器。当 Spring Data Jpa 在接口中检测到这些方法时,它会使用方法名称来创建查询。检查:
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation
但是,您要创建的查询包含一个关系,并且不支持使用命名查询,因此您需要使用 QueryDSL 来构建您自己的查询。按照以下步骤操作:
- 在
OwnerRepositoryCustom.java
接口中创建新方法public List<Owner> findAllByPetName(String name);
。 在
OwnerRepositoryImpl.java
class 中实现上述方法,如下所示: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 存储库重复上述步骤,以获取分配给具有特定名称的 Owner 的所有宠物。
在此处查看有关 QueryDSL 的更多信息:
希望对您有所帮助。