2009-05-08 11 views
13

Sto studiando lo sviluppo di applicazioni Enterprise in Java, .NET e Groovy. Per ogni piattaforma, proveremo quanto è difficile realizzare un semplice servizio web SOAP. Useremo gli strumenti e le librerie che sono più comunemente utilizzati, per ricercare il mondo reale nel modo più accurato possibile.JPA o Hibernate for Java Persistence?

A questo proposito, quando si utilizza Hibernate per la persistenza, sarebbe meglio riflettere il mondo reale per utilizzare il nuovo JPA (Java Persistence API) o l'API personalizzata Hibernate esistente prima che JPA fosse disponibile?

risposta

14

Come probabilmente già sapete, dal 3.2 Hibernate è certificato JPA. Puoi facilmente utilizzare Hibernate come provider JPA senza dover utilizzare alcuna delle API "personalizzate" di Hibernate.

Si consiglia di utilizzare direttamente JPA con Hibernate come provider. E usa annotazioni piuttosto che XML (molto più bello).

Quindi quando hai bisogno di qualcosa in più puoi sempre ottenere la sessione di ibernazione. Per esempio, trovo spesso che devo fare questo per passare una raccolta ad una query come parametro (setParameterList).

+0

Lo so, ma in una recente conferenza a cui abbiamo partecipato è stato espresso che JPA è ancora immaturo e non espone ancora tutte le funzionalità avanzate. –

+1

Ricorda che JPA deve anche fungere da minimo comune denominatore tra i livelli di persistenza sottostanti che supporta. Quindi, se Hibernate ha la funzione di whizzbang A e Toplink no, allora l'API JPA non può esporre la funzione. –

1

E 'strano come si recita la tua domanda

nuovo APP ... o pianura vecchio Hibernate

Suona come uno è stato in giro per sempre e l'altro è stato appena rilasciato . Certo che non è vero. JPA è stato influenzato non solo da Hibernate, ma anche da TopLink e dai bean di entità J2EE. Il primo riferimento alla bozza di JSR 220 è tornato a partire dal 2003: come è la novità? Se si utilizza JPA con Hibernate, si utilizza ancora Hibernate ed è libero di applicare eventuali estensioni proprietarie di Hibernate.

Quindi la scelta è vostra: utilizzare API proprietarie o utilizzare equivalente stabilito e API standard ...

0

Si potrebbe attaccare con una specifica pura JPA, nel caso in cui si desidera scambiare Hibernate, ma ciò che si' Probabilmente, a un certo punto, scoprirai che non lo cambierai mai e che ti sei perso tutte le straordinarie funzionalità specifiche di Hibernate.

Si consiglia di utilizzare direttamente Hibernate e, come suggerisce Damo, le annotazioni anziché XML. Assicurati di avere una solida comprensione della "magia" che porta Hibernate. Se non stai attento, potresti davvero battere il database. Ad esempio, c'è un problema di n + 1 di query a seconda di come lo si fa @OneToOne unisce:

Hibernate OneToOne automatic join fetching (resolving n+1 problem)

Consiglio inoltre di utilizzare un database embedded per i test unitari/integrazione sulle vostre domande Hibernate, e orologio l'SQL che viene generato per assicurarsi che assomigli a qualcosa che potresti scrivere a mano.