【发布时间】:2017-04-28 05:13:44
【问题描述】:
我不想使用 Roo 生成两个或更多表的查找器。 示例诊所我想添加一个查找器,让所有所有者都拥有一只给定名字的宠物,或者所有宠物都拥有给定名字的所有者。
这可能在 Roo 中实现吗?
【问题讨论】:
标签: spring-roo
我不想使用 Roo 生成两个或更多表的查找器。 示例诊所我想添加一个查找器,让所有所有者都拥有一只给定名字的宠物,或者所有宠物都拥有给定名字的所有者。
这可能在 Roo 中实现吗?
【问题讨论】:
标签: spring-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类中实现上述方法,如下所示:
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 的更多信息:
希望对你有帮助。
【讨论】: