V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ebony0319
V2EX  ›  问与答

2019 年请教,spring data jpa 中,分页查询返回多个表字段应该怎么处理?

  •  
  •   ebony0319 · 2019-06-25 23:31:11 +08:00 · 1368 次点击
    这是一个创建于 1763 天前的主题,其中的信息可能已经有所发展或是发生改变。

    先说一下最近使用 JPA 的体验:说真的,这辈子我都不想再碰了,但是项目选型就用了 JPA。当然 JPA 方面我也很水。 我遇到了一个老哥之前发的帖子:/t/333899 不知道到现在有没有好的解决方案,我这几天也是遇到了这个问题。 引用一下:

    继承了 PagingAndSortingRepository , 这个接口提供了 Page<t> findAll(Pageable var1); 方法 我需要自定义 sql 然后返回字段是从两个表中挑选出来的. sql 类似这样的:</t>

    select a.name ax , a.cd cd , b.name ax from a 
    left join b on b.id = d.bid
    

    我需要在上面 sql 返回结果的基础上分页和排序, 请问大家怎么处理这个问题?


    ebony0319
        1
    ebony0319  
    OP
       2019-06-26 11:10:13 +08:00
    老哥们在么
    lllpla
        2
    lllpla  
       2019-06-26 11:42:37 +08:00   ❤️ 1
    对于单表来说,findAll 里面用

    PageRequest.of(0,10, Sort.by(Sort.Order.desc("xxx")))
    多表可能也是用这个吧 仅供参考
    wdmx007
        3
    wdmx007  
       2019-06-26 16:22:24 +08:00   ❤️ 1
    试试在 @Query 里面写 JPQL (自定义字段+join ) ,
    然后在 SpringDataJPA 的 Repository 接口定义方法 Page<Object[]> findXXX( );

    OrderRefundRecord
    @OnoToOne
    Order

    参考一下这个
    ```java

    @Query("select R.remark, R.reason, O.id,O.contactMobile from OrderRefundRecord R left join R.order O where R.order.contactName = ?1 ")
    Page<Object[]> findTest(String name,Pageable pageable);

    ```
    wdmx007
        4
    wdmx007  
       2019-06-26 16:28:04 +08:00   ❤️ 1
    这里面提到不用写为 Object[] ,可以定义 VO 来接收数据,待验证
    https://blog.csdn.net/phapha1996/article/details/78994395
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5398 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 07:27 · PVG 15:27 · LAX 00:27 · JFK 03:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.