El Noguer

Joaquim Perez i Noguer

JDBC vs Hibernate vs JPA vs JDO

Filed under: Ciència i tecnologia — Joaquim Perez Noguer at 4:42 pm on Dilluns, març 10, 2014

Quin API és millor per accedir en una base de dades relacional amb Java? SQL vs Hibernate vs JPA vs JDO ?

Primer de tot cal aclarir conceptes:

  • JDO i JPA són tots dos especificacions, no són implementacions
  • Tant JDO com JPA permeten fer consultes a la base de dades relacional i mapar els resultats en objectes java. De la mateixa manera també permet fer l’operació inversa i gravar informació a la base de dades a partir d’objectes Java.
  • En canvi SQL permet escriure codi sql i executar-lo en Java. El codi sql només permet gravar tipus de dades que entengui la base de dades, així que no es poden gravar objectes Java.
  • La idea de les especificacions, és que puguis tenir diverses implementacions de la mateixa especificació i que puguis triar la que millor et vagi a cada moment.
  • Hibernate és una implementació de  JPA. Tot i que té algunes coses que van més enllà de l’especificació de JPA.

Pros i Contres

Pros d’utilitzar SQL:

  • java.sql.* és el api més senzill per accedir a una base de dades relacional
  • Permet escriure tot el SQL possible per la base de dades.

Contres d’utilitzar SQL:

  • Si es vol treballar amb orientació objectes Java i utilitzar Sql , no hi ha més remei que copiar a mà un a un tots els valors del resultat d’una consulta sql al objecte java.
  • Quan es van consultes amb preparedstatement i s’utilitzen paràmetres, cal passar els paràmetres per ordre que apareixen els ‘?’ en el sql, no hi ha manera d’utilitzar noms de paràmetres dins el sql.

Pros d’utilitzar JDO:

  • JDO permet treballar amb bases de dades no relacionals: ,db4o, hbase, ldap, bigtable, couchdb (connectors de cassandra) etc…
  • Tant pots treballar amb datasources sql com amb  no-sql.
  • Com que no utilitza objectes  proxyno proxy no hi ha problemes després alhora de comparar si dos objectes són iguals o no via hashcode() o equals().
  • Objectes Java són bàsicament  POJO
  • Permet més tipus de camps de base de dades

Contres d’utilitzar JDO:

  • El desenvolupament de JDO es va aturar
  • Les implementacions de JDO utilitzen  bytecode enhancements

Pros d’utilitzar JPA (hibernate):

  • És més utilitzat
  • Permet fer consultes amb un sql millorat per a treballar amb objectes: HQL.
  • Permet fer consultes amb un SQL reduït.
  • Permet fer consultes també via mètodes java, sense utilitzar HQL ni SQL (Criteria).

Contres d’utilitzar JPA (hibernate):

  • Si es fan consultes amb un SQL reduït, hi ha moltes sorpreses desagradables i paraules prohibides.
  • Quan es comparen dos objectes, no es pot utilitzar equals(), cal comparar el valor dels mètodes Java que tenen la clau primària (pk).
  • HQL no permet fer unions.
  • Criteria és molt complicada quan es volen fer joins.

Al Java li passa com a la majoria de llenguatges amb èxit: el perden les sigles. I un dels llocs que més es nota el problema és amb l’accés a la base de dades.

Més informació:   Hibernate vs JPA vs JDO – pros and cons of each? – Stack Overflow.



No Comments »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>