【问题标题】:Spring Roo 2.0.0.RC1 - How can i add a finder over two or more tablesSpring Roo 2.0.0.RC1 - 如何在两个或多个表上添加查找器
【发布时间】:2017-04-28 05:13:44
【问题描述】:

我不想使用 Roo 生成两个或更多表的查找器。 示例诊所我想添加一个查找器,让所有所有者都拥有一只给定名字的宠物,或者所有宠物都拥有给定名字的所有者。

这可能在 Roo 中实现吗?

【问题讨论】:

    标签: spring-roo


    【解决方案1】:

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

    http://www.querydsl.com/

    希望对你有帮助。

    【讨论】:

    • 感谢您的回答,我现在不想知道 roo 可以什么不可以,现在我看到这可以 roo 不可以,我自己实现了。
    • 我知道 Roo 没有发布,但我会测试并使用它。所以我测试了 roo 实际支持什么,什么不支持。 ;)
    • 太棒了!如果它解决了您的问题,请记住验证答案! :) 问候,
    猜你喜欢
    • 2017-12-29
    • 2018-01-04
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多