Stel je hebt de kans om een nieuwe applicatie plus database te ontwerpen en je besluit (N)Hibernate te gebruiken. Hoe definieer je dan de id's van je entiteiten?
Ik zie 3 mogelijkheden:
1) Je gebruikt autoincrement/sequences op database niveau, of in hibernate met een SequenceGenerator.
2) Je gebruikt een UUID generator bij object construction om meteen een id te genereren die uniek is. Die wordt pas gepersist als de entiteit wordt gepersist, maar die kan meteen voor equals() en hashcode() worden gebruikt. De kans op collisions is te klein om echt relevant te zijn.
3) Je gebruikt een sequence generator tijdens object construction. In Hibernate heb je de SequenceHiLoGenerator of je kan een eigen implementatie maken.
Nu kort de pros en cons voor alle 3 de mogelijkheden:
1) pros:
3) pros:
Ik zie 3 mogelijkheden:
1) Je gebruikt autoincrement/sequences op database niveau, of in hibernate met een SequenceGenerator.
2) Je gebruikt een UUID generator bij object construction om meteen een id te genereren die uniek is. Die wordt pas gepersist als de entiteit wordt gepersist, maar die kan meteen voor equals() en hashcode() worden gebruikt. De kans op collisions is te klein om echt relevant te zijn.
3) Je gebruikt een sequence generator tijdens object construction. In Hibernate heb je de SequenceHiLoGenerator of je kan een eigen implementatie maken.
Nu kort de pros en cons voor alle 3 de mogelijkheden:
1) pros:
- simpel
- is efficient en snel
- alle id's zijn opeenvolgend en kunnen relatief klein zijn, int's of longs
- Je kan geen gebruik maken van het id voor equals() en hashcode() functies omdat het id null kan zijn
- simpel
- is snel
- Mogelijkheid tot collisions als er veel entiteiten worden gepersist
- ID moet in de database waarschijnlijk een string worden omdat databases vaak geen 128 numeric type hebben *
- ID's zijn niet makkelijk te onthouden of te gebruiken als je met de hand queries schrijft tijdens debugging, en zijn niet oplopend
3) pros:
- Geen van de nadelen van de andere 2 mogelijkheden
- complex kwa code
- kan extra vertraging optreden bij het creeeren van vele entiteiten
- er is een database connectie nodig bij het creeeren van entiteiten
"Beauty is the ultimate defence against complexity." David Gelernter