Verschil tussen JPA en slaapstand

JPA vs Hibernate

Vrijwel alle bedrijfstoepassingen zijn vereist om regelmatig toegang te krijgen tot relationele databases. Maar een probleem met eerdere technologieën (zoals JDBC) was de impedantie-mismatch (verschil tussen objectgerichte en relationele technologieën). Een oplossing voor dit probleem werd geïntroduceerd door de introductie van een abstracte laag genaamd Persistence-laag, die databasetoegang inkapselt uit de bedrijfslogica. JPA (Java Persistence API) is een raamwerk dat is toegewezen voor het beheer van relationele gegevens (met behulp van de persistentielaag) in Java-toepassingen. Er zijn veel leveranciersimplementaties van JPA die worden gebruikt binnen de Java-ontwikkelaarsgemeenschap. Hibernate is de meest populaire implementatie van JPA (DataNucleus, EclipseLink en OpenJPA zijn enkele andere). De nieuwste JPA-versie (JPA 2.0) wordt volledig ondersteund door Hibernate 3.5, die in maart 2010 werd uitgebracht.

Wat is PPV?

JPA is een raamwerk voor het beheren van relationele gegevens voor Java. Het kan worden gebruikt met toepassingen die gebruikmaken van JSE (Java Platform, Standard Edition) of JEE (Java Platform, Enterprise Edition). De huidige versie is JPA 2.0, die op 10 december 2009 werd uitgebracht. JPA verving EJB 2.0- en EJB 1.1-entiteitbonen (die zwaar werden bekritiseerd omdat ze zwaar waren door de Java-ontwikkelaarsgemeenschap). Hoewel entity beans (in EJB) persistentievoorwerpen opleverden, werden veel ontwikkelaars gebruikt om relatief lichte objecten te gebruiken die werden aangeboden door DAO (Data Access Objects) en andere vergelijkbare frameworks. Als gevolg hiervan werd PPV geïntroduceerd en het ving veel van de nette kenmerken van de hierboven genoemde raamwerken.

Persistentie zoals beschreven in JPA heeft betrekking op de API (gedefinieerd in javax.persistence), JPQL (Java Platform, Enterprise Edition) en metagegevens vereist voor relationele objecten. De status van een persistentiteitsentiteit is meestal aanwezig in een tabel. Instanties van een entiteit komen overeen met rijen van de tabel van de relationele database. Metagegevens worden gebruikt om de relaties tussen entiteiten uit te drukken. Annotaties of afzonderlijke XML-descriptorbestanden (geïmplementeerd bij de toepassing) worden gebruikt om metagegevens in entiteitsklassen te specificeren. JPQL, vergelijkbaar met SQL-query's, wordt gebruikt voor het opvragen van opgeslagen entiteiten.

Wat is Hibernate?

Hibernate is een raamwerk dat kan worden gebruikt voor object-relationele mapping bedoeld voor Java-programmeertaal. Meer in het bijzonder is het een ORM-bibliotheek (Object Relational Mapping) die kan worden gebruikt om object-relationeel model in een conventioneel relationeel model in kaart te brengen. In eenvoudige bewoordingen creëert het een koppeling tussen Java-klassen en tabellen in relationele databases, ook tussen Java en SQL-gegevenstypen. Slaapstand kan ook worden gebruikt voor het opvragen en ophalen van gegevens door het genereren van SQL-aanroepen. Daarom is de programmeur ontheven van het handmatig hanteren van resultatensets en het converteren van objecten. Hibernate wordt vrijgegeven als een gratis en open source framework dat wordt verspreid onder GNU-licentie. Een implementatie voor JPA API is te vinden in Hibernate 3.2 en latere versies. Gavin King is de oprichter van Hibernate.

Wat is het verschil tussen JPA en Hibernate?

JPA is een raamwerk voor het beheer van relationele gegevens in Java-toepassingen, terwijl Hibernate een specifieke implementatie van JPA is (idealiter kunnen JPA en Hibernate niet rechtstreeks worden vergeleken). Met andere woorden, Hibernate is een van de populairste frameworks waarmee JPA wordt geïmplementeerd. Sluimerstand implementeert JPA via Hibernate Annotation- en EntityManager-bibliotheken die bovenop Hibernate Core-bibliotheken worden geïmplementeerd. Zowel EntityManager als Annotaties volgen de levenscyclus van Hibernate. De nieuwste JPA-versie (JPA 2.0) wordt volledig ondersteund door Hibernate 3.5. JPA heeft het voordeel dat het een interface heeft die gestandaardiseerd is, zodat de ontwikkelaarsgemeenschap er meer vertrouwd mee is dan Hibernate. Aan de andere kant kunnen native Hibernate-API's als krachtiger worden beschouwd omdat de functies een superset zijn van die van JPA.