[(N)Hibernate] Hoe de grootte van een collectie opvragen?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • user109731
  • Registratie: Maart 2004
  • Niet online
Hallo,

Ik ben begonnen met Hibernate maar loop tegen een probleem aan. Stel we nemen het klassieke customer-orders voorbeeld, waarbij ik een lijst met customers wil weergeven en het aantal orders dat ze hebben. Ik zie de volgende mogelijkheden:
  • Customer.orders.size() geeft het aantal orders. Dit ligt het meest voor de hand, maar zorgt wel dat alle orders geladen worden terwijl we enkel het aantal nodig hebben.
  • Een property met een formula gebruiken om het aantal op te vragen, iets als:
    XML:
    1
    2
    
    <property name="OrderCount" 
        formula="(select count(*) from order o where ...)" />
De eerste methode is eenvoudiger (hoewel je moet voorkomen dat er n+1 queries gebruikt worden) maar mogelijk minder efficiënt. De tweede is echter meer werk en de property word volgens mij niet bijgewerkt als je een order toevoegt aan de collectie, bovendien voer je per customer een subquery uit om het aantal orders te bepalen.

Hoe zouden jullie dit aanpakken? Laad je heel de collectie in of gebruik je een speciale property waar je het aantal in zet? Of is er een betere mogelijkheid?

Bij voorbaat dank.

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:22
Voorkomen dat er n+1 queries worden uitgevoerd, kan door middel van je fetch strategy te bepalen. (op join zetten bv).

Ik denk niet dat ik zou kiezen om mijn Customer class een collectie van orders te laten hebben.
Dit zou nogal 'zwaar' kunnen zijn, en wat is het voordeel ?

Wat je kan doen, voor je overzicht, is een soort van 'CustomerOverview' class maken die je gebruikt om dergelijke overzichten te tonen. Dus met een extra property waarin de OrderCount weergegeven wordt dmv een formula. (Wellicht kan je hier ook een fetch strategy specifieren ? )

https://fgheysels.github.io/