Waarom ORM?

 
08 februari 2008

De laatste tijd ben ik mijzelf aan het pijnigen over de vraag: Is het wel zo handig om een ORM tool gebruiken?

Momenteel ben ik werkzaam op een project dat een erg strakke deadline heeft (wie niet?). Omdat we met een bestaande applicatie begonnen was het model in de applicatie erg slecht. Een andere Sogyiaan/Collega heeft dit model verbeterd en het begint langzaam aan een echt domein te worden. Het is nog lang niet een domein volgens de volledige principes van Domain Driven Design maar we zijn al iets meer tevreden dan met wat er was.
De applicatie maakt gebruik van Hibernate. Ik ben erg fan van Hibernate, maar ik heb ook veel ervaring met iBATIS en pure JDBC.

Problemen
De reden dat ik begon te twijfelen aan het feit of een ORM wel zo handig is zijn als volgt:

Kennis
Een groot ontwikkelteam met verschillende niveau’s kennis van Hibernate. Als je een tool inzet moet het hele team er achter staan en iedereen moet weten hoe hij werkt. Omdat sommige mensen in ons team een ander idee hadden hoe je een web applicatie bouwt werden objecten in de sessie gezet. Dit zorgde ervoor dat je foutmeldingen kreeg als:

Illegal attempt to associate a collection with two open sessions

Toen we eindelijk dit probleem opgelost hadden hadden we er zoveel tijd aan besteed dat we de tijdswinst, die Hibernate (of welke ORM dan ook) ‘beloofd’ had, teniet is gedaan.

Efficiëntie
Onze domein objecten hebben vele relaties waardoor Hibernate zeer inefficiënte queries maakt. Dit gaat zo ver dat sommige (relatief eenvoudige) selecties sommige tabellen vier maal joinen om alle gegevens bij elkaar te krijgen. Terwijl Hibernate enorme joins maakt om alle gegevens bij elkaar te krijgen proberen wij alleen maar een samenvatting te maken om dit te tonen in een zoekscherm. Van alle gegevens die er opgehaald worden, wordt waarschijnlijk maar iets van 10% gebruikt.

Onvolledig
Hibernate heeft ook zijn limitaties. Dat heb ik afgelopen week ook ontdekt. Ik moest koppelen met een legacy database met een niet al te lekkere tabel structuur. Het waren twee tabellen. Ze hadden een een op meer relatie en dat wilde ik ook in de objecten terug zien. Het heeft mij een dag gekost om er achter te komen of dat ging lukken. Uiteindelijk heb ik de relatie achterwege gelaten en sla ik de objecten een voor een in de database op. In totaal heeft het me meer dan 12 uur gekost om wat gegevens in een andere database te kunnen opslaan terwijl het mij waarschijnlijk maar 4 uur gekost had om hetzelfde te doen met (simpele) JDBC. Overigens ga ik hier niet verkondigen dat er een bug zit in Hibernate, de kans is groot dat ik een fout heb gemaakt bij het mappen van deze objecten.

Alle tools hebben verschillenden voordelen en nadelen. Hibernate probeert zich te positioneren als een ideale ORM-tool om legacy databases en nieuwe mee te mappen. Mijn ervaring verteld mij echter: gebruik Hibernate alleen bij nieuwbouw.


Werken met ?
Kijk dan bij onze mogelijkheden voor zowel starters als ervaren engineers.


Categorieën: Development

Tags: , , , ,


Reactie

  • Hoi Ivo,

    Ik ben het in deze helemaal met je eens. Mijn ervaring leert ook dat (N)Hibernate een hoop extra kennis vergt van ontwikkelaars en dat de inzet ervan verre van triviaal is.
    Sterker dan jouw conclusie dat je Hibernate alleen bij nieuwbouw zou moeten gebruiken zou ik zelfs willen stellen dat je er bij nieuwbouw ook zeker rekening mee moet houden dat de inzet van Hibernate zijn weerslag kan hebben op alle lagen van je applicatie!

    Desalniettemin is het zeker een krachtige O/R bridge die zeker zijn toegevoegde waarde kan hebben.

    Geplaatst op 10 februari 2008 om 18:56 Permalink