2016-03-15 1 views
2

Je cette entitéLimiter le nombre d'enregistrement d'une jointure

@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; 
} 

Ma requête

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 peut être très grand, je cherche un moyen de limiter le nombre d'enregistrement retourné.

Existe-t-il un moyen de limiter le nombre de valeur de roomPaymentList?

Répondre

2

Si je vous comprends bien - vous voulez limiter le nombre de RoomPaymentList lignes pour chaque RentAmount, mais ne pas limiter le nombre de lignes dans le jeu de résultats. Si oui, il n'y a pas de telle manière dans JPA. Mais vous pouvez écrire une requête native ou une procédure stockée et la limiter dans la sous-requête, etc. (Example of such query for MS SQL).

+0

ya exactement, jpa semblent très limitées. –

0

Cela peut vous aider à obtenir les 10 lignes en utilisant la requête jpa.

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 
+0

Pas vraiment ce qu'il demandait, il était curieux de savoir comment limiter à l'intérieur de la jointure (et pas toute la requête) – Amalgovinus