Come funziona ORM sotto le coperte? Inoltre, qual è il modo migliore per avere oggetti persistenti in Java?

StackOverflow https://stackoverflow.com/questions/1231295

  •  22-07-2019
  •  | 
  •  

Domanda

Come funziona ORM? Gli oggetti sono serializzati in BLOB?

In Java, JDO è ancora la strada da percorrere per questo? Cos'altro è disponibile? Sembra che si sia parlato molto di EJB, serializzazione diretta degli oggetti e JDO.

È stato utile?

Soluzione

Per rispondere alla tua prima domanda, ecco un estratto da Hibernate in Action , che dice che ci sono vari modi per implementare ORM:

  

Puro relazionale

     

L'intera applicazione, incluso il   interfaccia utente, è progettata intorno al   modello relazionale e basato su SQL   operazioni relazionali. Questo approccio,   nonostante le sue carenze in generale   sistemi, può essere un'ottima soluzione   per applicazioni semplici dove un basso   il livello di riutilizzo del codice è tollerabile.   Direct SQL può essere ottimizzato in ogni   aspetto, ma gli svantaggi, come ad esempio   mancanza di portabilità e   manutenibilità, sono significativi,   soprattutto a lungo termine.   Applicazioni in questa categoria spesso   fare un uso pesante delle procedure memorizzate,   spostando parte del lavoro fuori dal   livello aziendale e nel database.

     

Mappatura oggetti luce

     

Le entità sono rappresentate come classi   che sono mappati manualmente su   tabelle relazionali. SQL / JDBC con codifica manuale   è nascosto dalla logica aziendale   utilizzando modelli di design noti.   Questo approccio è estremamente diffuso   ed è efficace per le applicazioni   con un numero limitato di entità, o   applicazioni con generico,   modelli di dati basati su metadati. Immagazzinato   le procedure potrebbero avere un posto in questo   tipo di applicazione.

     

Mappatura oggetti media

     

L'applicazione è progettata attorno a un   modello a oggetti. SQL viene generato in   tempo di costruzione usando una generazione di codice   strumento o in fase di esecuzione per codice framework.   Le associazioni tra oggetti sono   supportato dalla persistenza   meccanismo e potrebbero essere richieste   specificato utilizzando un oggetto orientato   linguaggio delle espressioni. Gli oggetti sono   memorizzato nella cache dal livello di persistenza. UN   moltissimi prodotti ORM e fatti in casa   i livelli di persistenza supportano almeno   questo livello di funzionalità. Va bene   adatto per applicazioni di medie dimensioni   con alcune transazioni complesse,   in particolare quando la portabilità tra   diversi prodotti di database è   importante. Queste applicazioni di solito   non utilizzare le procedure memorizzate.

     

Mappatura completa degli oggetti

     

Supporta la mappatura completa degli oggetti   sofisticata modellazione di oggetti:   composizione, eredità,   polimorfismo e "persistenza di   raggiungibilità. ”Il livello di persistenza   implementa la persistenza trasparente;   le classi persistenti non ereditano alcuna   classe base speciale o devono   implementare un'interfaccia speciale.   Strategie di recupero efficienti (pigro   e desideroso di recuperare) e la memorizzazione nella cache   le strategie sono implementate   in modo trasparente all'applicazione. Questo   il livello di funzionalità difficilmente può essere   raggiunto da una persistenza nostrana   livello: è equivalente a mesi o   anni di tempo di sviluppo. Un numero   di ORM Java commerciale e open source   gli strumenti hanno raggiunto questo livello di   qualità. Questo livello soddisfa il   definizione di ORM che stiamo utilizzando in questo   libro. Diamo un'occhiata ai problemi che abbiamo   aspettarsi di essere risolto da uno strumento che   ottiene la mappatura completa degli oggetti.

Altri suggerimenti

ORM = Mappatura relazionale oggetto, gli attributi degli oggetti sono mappati su colonne nel database realazionale. Quella mappatura è arbitraria, quindi potrebbe essere fatta ai BLOB, in pratica ciò che è più utile tende alle mappature naturali - Stringhe a Varchars, int a numeri interi ecc.

JPA è il luogo in cui cercare uno standard per ORM. L'APP sostituisce l'approccio CMP dell'EJB, ritenuto ingombrante. JPA consente di esprimere la mappatura come annotazioni Java e consente inoltre di specificare le mappature nei file di configutrazione, quando il supporto di più [database di quest'ultima può essere utile.

JPA ha un linguaggio di query in modo da poter costruire query sugli attributi degli oggetti.

JPA è supportato dai principali fornitori di App Server e anche da prodotti come Hibernate.

Ho trovato JPA molto carino con cui lavorare, più che con EJB CMP.

Raccomanderei di usare ancora le facciate dei bean di sessione EJB per la confusione e la sicurezza delle transazioni - l'approccio basato sulle annotazioni rende EJB 3 way più facile da usare rispetto a EJB 2, un overhead minimo di codifica.

JDO è in realtà anche ORM standard e fornisce una specifica più completa di JPA (1 + 2). JPQL è più focalizzato sui concetti RDBMS e quindi imita SQL. JDOQL segue la sintassi Java, quindi è più basato sugli oggetti. Dipende se la tua app viene mai considerata come andare via da RDBMS. In tal caso, JPA non è la strada da percorrere. Se è esclusivamente per RDBMS, JPA è sicuramente una considerazione.

La serializzazione degli oggetti in BLOB dipende dalla configurazione. Se lo desideri, puoi farlo per tipi di oggetti complessi, ma non saranno interrogabili. Se invece li persisti in un formato nativo, puoi anche interrogarli, portando ad app più efficienti.

--Andy (DataNucleus - Persistenza JDO e JPA)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top