2013-02-23 5 views
6

Я совершенно новой весной миром, и я учусь, как интегрировать гибернации и Spring Frameworkсвязь между JPA и Hibernate аннотаций

я быть_наст о собой своем отношении Разногласия между Hibernate и JPA аннотациями аннотацией.

У меня при й что-то вроде следующего класса сущностей:

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; 
    } 
} 

Дела в том, что я не понимая, что отношения между Hibernate и JPA аннотациями аннотацией

аннотаций @Entity, @Table (name = "person"), @GeneratedValue (стратегия = GenerationType.AUTO) и id использование в предыдущем exa mple - простая аннотация JPA или конкретная аннотация для Hibernate?

Если я использую аннотации JPA для сохранения данных в базе данных, что дает мне Hibernate?

Tnx

Andrea

+5

JPA - это API, hibernate обеспечивает реализацию. –

+2

поэтому JPA предоставляет мне что-то вроде интерфейсов или абстрактных классов, которые реализуются Hibernate? – AndreaNobili

+3

@AndreaNobili точно –

ответ

18

Ответ смешанный.

Как указывалось другими, JPA является спецификацией, в которой Hibernate обеспечивает реализацию. Вы используете аннотации JPA/API и, включив в свой путь путь к Hibernate-банкам, Hibernate предоставит фактическую логику.

Кроме того, Hibernate предлагает API, не имеющий отношения к JPA. Вы можете использовать это; Основное различие заключается в:

  • если вы используете API JPA, вы можете впоследствии заменить Hibernate другими реализации JPA (В. EclipseLink) и вам не нужно будет никаких изменений в программе

  • если вы используете непосредственно Hibernate API, у вас нет альтернатив реализации. Преимущество может заключаться в том, что вы можете использовать функции, определенные Hibernate, но не входящие в стандарт JPA, которые могут быть использованы для вас.

Во всяком случае, вы должны полностью избегать смешивать JPA с API-интерфейсом Hibernate. Будучи новичком, я бы посоветовал вам придерживаться JPA.

Чтобы гарантировать, что вы используете JPA, включайте только классы/аннотации от java.persistence. Не включайте ничего из org.hibernate (или, если вы хотите просто использовать Hibernate, сделайте как раз наоборот).

+4

+1, хотя последняя часть неверна. Даже если вы используете Hibernate с его проприетарным API, вам придется использовать аннотации JPA. Hibernate не переопределяет аннотации JPA. –

+4

«вам не понадобятся никакие изменения в вашей программе» - интересно, кто-нибудь когда-либо обнаружил, что это на 100% верно. :) +1 за ответ. –

6

Hibernate является реализация спецификации JPA. JPA - это всего лишь спецификация, а также набор аннотаций и интерфейсов. Вам нужна реализация JPA для ее использования, а Hibernate - один из них. Так же, как использовать JDBC, вам нужен драйвер базы данных.

Пакет аннотации javax.persistence, поэтому это аннотации JPA. Аннотации гибернации находятся в пакете org.hibernate.xxx.