【问题标题】:Limit the number of record from a join限制来自连接的记录数
【发布时间】:2016-07-01 09:29:27
【问题描述】:

我有这个实体

@Entity
public class RentAmount {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long rentAmountId;

    private BigDecimal unpaidBalance;

    private BigDecimal cashAdvance;

    private BigDecimal totalRentAmount;

    private LocalDate paymentRentDueDate;

    private LocalDate paymentDueDate;

    @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.LAZY)
    @OrderBy
    private Set<RoomPayment> roomPaymentList;

    @OneToOne
    private Lodger lodger;
}

我的查询

select r from RentAmount r Join fetch r.lodger l join fetch l.bailList b join fetch r.roomPaymentList p where r.paymentRentDueDate <= :date and b.paymentPeriod=:paymentPeriod order by r.rentAmountId

RoomPaymentList 可能非常庞大,我寻找一种方法来限制返回的记录数。

有没有办法限制 roomPaymentList 中的 value 数量?

【问题讨论】:

    标签: jpa spring-data-jpa jpa-2.1


    【解决方案1】:

    如果我理解正确 - 您想限制每个 RoomPaymentList 的行数 RentAmount,但不限制结果集中的行数。如果是这样,那么 JPA 中就没有这种方法。但是您可以编写一些本机查询或存储过程并将其限制在子查询等中(Example of such query for MS SQL)。

    【讨论】:

    • 没错,jpa 似乎非常有限。
    【解决方案2】:

    如果你有一个普通的 MySql 查询,你可以通过追加来做到这一点

    Limit 5;
    

    到您的查询。 Oracle 提供 ROWNUM 替代方案:

    ROWNUM <= 5;
    

    (如此处所述http://www.w3schools.com/sql/sql_top.asp)。

    【讨论】:

      【解决方案3】:

      这可能有助于您使用 jpa 查询获取 10 行。

      String hql = "select r from RentAmount r Join fetch r.lodger l join fetch l.bailList b join fetch r.roomPaymentList p where r.paymentRentDueDate <= :date and b.paymentPeriod=:paymentPeriod order by r.rentAmountId";
      Query query = session.createQuery(hql);
      query.setParameter("date", "date");
      query.setParameter("paymentPeriod", "paymentPeriod");
      List results = query.list();
      
      // If you want to fetch only 10 rows then
      query.setMaxResults(10); //it takes only an integer parameter
      

      【讨论】:

      • 不是他真正要问的,他很好奇如何限制连接内部(而不是整个查询)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多