2010-02-12 15 views
14

voglio sviluppare il mio progetto su Google App Engine. Voglio usare google big table come database. Per il database ho due opzioni JPA e JDO. Per favore, ragazzi, per favore suggeritemi? Entrambi sono nuovi per me e ho bisogno di impararli. Quindi mi concentrerò su uno dopo le tue risposte.Differenza tra JPA e JDO?

risposta

9

Dal momento che si sta utilizzando dati Nucleus, vedere il loro FAQ sul JDO vs APP. http://www.datanucleus.org/products/accessplatform_2_1/jdo_jpa_faq.html

DataNucleus AccessPlatform supporta entrambe le specifiche JDO e JPA di Java persistenza. In quanto tale, non ha "interessi personali" in nessuna delle due tecnologie, ritenendo che sia per gli utenti scegliere quale preferiscono. C'è stato molto FUD sul web su JDO e JPA, in gran parte perpetrato dai venditori di RDBMS. Questa FAQ corregge molti di questi punti

+0

Il collegamento è di nuovo morto. –

0

JPA è lo standard java leader per la persistenza. Quindi dirò di usare JPA se stai usando RDBMS e richiedi ORM.
Hibernate viene generalmente utilizzato come implementazione JPA. Se hai bisogno di alcune funzionalità extra puoi usare le annotazioni specifiche di ibernazione.

Questa domanda sembra già essere discusso qui JDO vs JPA for Java on Google App Engine

+0

Ma voglio usare google datastore (grande tabella) utilizzando Data Nucleus. Ciò che seguo JPA o JDO – user246160

+2

Hibernate può essere "generalmente utilizzato come implementazione JPA" ma funziona solo per RDBMS, e di conseguenza non funzionerà GAE/J. Come per i documenti per GAE/J, JDO si avvicina di più a quello datastore, anche se i modelli di persistenza sono semplici e anche i requisiti di query sono semplici, quindi è possibile utilizzare anche JPA. Con JDO o JPA l'utente dovrà utilizzare DataNucleus – DataNucleus

2

Una differenza chiave è che JDO supportare un ricco modello di dominio (logica insieme ai dati), infatti tutte le classi persistenti può avere un riferimento alla corrente PersistenceManager, le query di emissione e, Immagino, è possibile non avere campi persistenti per impostazione predefinita.

JPA non supporta tale progettazione software. Infatti ogni Entità non ha un riferimento al PersistenceManager, per averlo bisogna ricorrere alle variabili ThreadLocal, che non è una soluzione molto elegante e robusta.

2

Poiché GAE BigTable non è un RDBMS, JDO è una scelta migliore. Ci sono alcuni articoli di confronto dettagliati in Aphache JDO, è utile per me.

1

JPA persegue gli oggetti java sui dati relazionali tramite ORM, mentre JDO è una specifica più generale per la persistenza degli oggetti java. Quindi usare JDO ti darà più libertà nelle opzioni di implementazione dello storage per i tuoi oggetti.