2014-10-28 13 views
9

Quando eseguo il programma standalone di Hibernate di esempio, nella mia mente è stato creato un po 'di confusione con l'utilizzo dell'annotazione di @Entity.Qual è la differenza tra @Entity in Hibernate e JPA

Ecco la mia domanda è, ho una classe persistente con @Entity dalla confezione javax.persistence allora sta funzionando bene, ma quando ho sostituito @Entity annotazione con Hibernate API (cioè dal pacchetto org.hibernate.annotations) allora sta dando org.hibernate.MappingException: Entità sconosciuta: com.jetti.test.Employee

Dare qualche spiegazione in più è molto apprezzata.

+2

Questo post SO spiega la differenza tra le due annotazioni e il motivo per cui la mappatura non è stata trovata: http://stackoverflow.com/questions/955515/difference-between-jpa-entity-and-hibernate-entity –

+0

e Hibernate Entity è deprecato quindi non dovresti usarlo FWIW; vedi javadocs invece di usare solo –

risposta

5

@ javax.persistence.Entity è ancora obbligatorio, @ org.hibernate.annotations.Entity non è una sostituzione.

Documentation

Quindi, hibernate di @Entity solo completa la javax.persistence.Entity, e dà un paio di opzioni di messa a punto.

+0

Ho pensato che Hibernate usi JPA sotto? – ha9u63ar

+2

@hagubear JPA è una specifica e Hibernate (come molti altri framework) implementa tale specifica. Per citare [questo] (http://en.wikibooks.org/wiki/Java_Persistence/What_is_JPA%3F) 'JPA stesso è solo una specifica, non un prodotto; non può eseguire la persistenza o qualcos'altro da solo. JPA è solo un insieme di interfacce e richiede un'implementazione. Nel contesto di questa domanda, significa che Hibernate implementa il supporto per 'javax.persistence.Entity', ma aggiunge ulteriori funzionalità con' org.hibernate.annotations.Entity'. –

4

La differenza è la stessa tra Hibernate e JPA, piuttosto JPA è solo una specifica, il che significa che non esiste implementazione e Hibernate è un'implementazione.

È possibile annotare le classi con annotazioni JPA, ma senza un'implementazione non accadrà nulla.

In modo astratto è possibile considerare "JPA" come linee guida.

Quando si utilizza l'ibernazione con JPA, si sta effettivamente utilizzando l'implementazione di Hibernate tramite JPA. Il vantaggio è che è possibile sostituire l'implementazione di JPA di Hibernate per un'altra implementazione delle specifiche JPA (Eclipse Link, DataNucleuse, ..) altrimenti se si utilizza direttamente Hibernate non è possibile passare a un altro ORM.

Spero che sia stato utile.


APP non è un'implementazione ORM ma è solo linee guida per attuare Object Relational Mapping (ORM) e non esiste un codice di fondo per l'attuazione. non fornirà alcuna funzionalità concreta alla tua applicazione. Il suo scopo è fornire una serie di regole e linee guida che possano essere seguite dai fornitori di implementazione JPA per creare un'implementazione ORM in modo standardizzato.

Hibernate è un provider JPA. In caso di nuove modifiche alle specifiche, l'ibernazione rilascia l'implementazione aggiornata per la specifica JPA. Altri provider JPA popolari sono Eclipse Link (implementazione di riferimento), OpenJPA, ecc.See Other provider here

@javax.persistence.Entity è una linea guida per un provider che implementa JPA linea guida

@org.hibernate.annotations.Entity è un'implementazione di Hibernate ORM

Futhermore è possibile see this other topic

+0

Non si ottiene una visione chiara della risposta, puoi approfondire su questo - @Xstian – jettisamba