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 的更多信息:

http://www.querydsl.com/

希望对您有所帮助。