2013-02-23 14 views
6

Sono abbastanza nuovo nel mondo primavera e sto studiando come integrare Hibernate e Spring quadroRelazione tra APP e Hibernate annotazione

ho qualche dount sul rapporto beetween Hibernate e JPA annotazioni annotazione.

whene ho qualcosa di simile la seguente classe entità:

package org.andrea.myexample.HibernateOnSpring.entity; 

import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Table; 


/* Classe che rappresenta un oggetto da persistere sul database 
* 
*/ 
@Entity 
@Table(name="person") 
public class Person { 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private int pid; 

    private String firstname; 

    private String lastname; 

    public int getPid() { 
     return pid; 
    } 

    public void setPid(int pid) { 
     this.pid = pid; 
    } 

    public String getFirstname() { 
     return firstname; 
    } 

    public void setFirstname(String firstname) { 
     this.firstname = firstname; 
    } 

    public String getLastname() { 
     return lastname; 
    } 

    public void setLastname(String lastname) { 
     this.lastname = lastname; 
    } 
} 

La cosa che io non sono la comprensione è ciò che è il rapporto tra Hibernate e JPA annotazioni annotazioni

L'annotazione @Entity, @Table (name = "person"), @GeneratedValue (strategy = GenerationType.AUTO) e id utilizzando nella precedente exa sono semplici annotazioni JPA o annotazioni specifiche per Hibernate?

se sto usando le annotazioni JPA per mantenere i dati nel database, cosa mi sta dando Hibernate?

Tnx

Andrea

+5

JPA è un'API, l'ibernazione fornisce un'implementazione. –

+2

quindi JPA mi fornisce qualcosa come interfacce o classi astratte implementate da Hibernate? – AndreaNobili

+3

@AndreaNobili esattamente –

risposta

18

La risposta è mista.

Come altri hanno sottolineato, JPA è una specifica che Hibernate fornisce un'implementazione. Si utilizzano annotazioni/API JPA e, includendo i jar Hibernate nel classpath, Hibernate fornirà la logica effettiva.

Inoltre, Hibernate offre un'API non correlata a JPA. Puoi usare anche quello; la differenza principale è:

  • se si utilizza l'API JPA, si può poi sostituire Hibernate da altra implementazione JPA (vg EclipseLink) e non avrete bisogno di modifiche al programma di

  • se si utilizza direttamente Hibernate API, non hai alternative di implementazione. Il vantaggio può essere che è possibile utilizzare funzionalità che Hibernate ha definito ma che non fanno parte dello standard JPA, che potrebbe essere utile per voi.

In ogni caso, ciò che dovresti evitare completamente è il mixaggio di JPA con l'API di Hibernate. Come principiante, ti consiglierei di attenersi a JPA.

Per garantire che si stia utilizzando JPA, includere solo classi/annotazioni da java.persistence. Non includere nulla da org.hibernate (o, se si desidera solo utilizzare Hibernate, fare esattamente l'opposto).

+4

+1, anche se l'ultima parte non è corretta. Anche se utilizzi Hibernate con la sua API proprietaria, dovrai utilizzare le annotazioni JPA. Hibernate non reimplementa le annotazioni JPA. –

+4

"non avrai bisogno di modifiche al tuo programma" - Mi chiedo se qualcuno lo abbia mai trovato vero al 100%. :) +1 per la risposta. –

6

Hibernate è un'implementazione della specifica JPA. JPA è solo una specifica e una serie di annotazioni e interfacce. Hai bisogno di un'implementazione di JPA per usarlo e Hibernate è uno di questi. Proprio come per usare JDBC, hai bisogno di un driver di database.

Il pacchetto dell'annotazione è javax.persistence, quindi sono annotazioni JPA. Le annotazioni di ibernazione sono nel pacchetto org.hibernate.xxx.

Problemi correlati