2014-03-30 2 views
0

자바 엔티티 bean 클래스 아래에서 우리는 @Id와 다른 주석을 사용하고있다. 이들은 javax.persistence. * 패키지에 있습니다.javax.persistence. *에 상응하는 hibernate. * annotations

나는 SO와 다른 포럼을 읽었으며, JPA는 스펙/룰 세트이고 Hibernate는 JPA 구현 중 하나라고 말한다. 그렇다면 JPA가 어떻게 이러한 클래스/인터페이스를 제공하고 있는지 @Id (생성자 인터페이스).

정확하게 이해하면 JPA 자체가 최대 절전 모드를 사용하지 않고 ORM을 지원할 수있는 기능을 제공합니까?

도 알고 싶습니다. 1) 이러한 JPA 주석에 해당하는 Hibernate 주석 클래스 - @ Id. 2) javax.persistence. * 패키지의 경우 Hibernate-Annotations jar를 사용해야합니까? 또는 JPA 특정 jar에서 가져온 것이므로 패키지 이름을 이해할 수 있도록 도와주십시오.

import java.io.Serializable; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Entity 
@Table(name = "employee") 
public class Employee implements Serializable { 
    public Employee() { 

    } 
    @Id 
    @Column(name = "id") 
    Integer id; 

    @Column(name = "name") 
    String name; 

    public Integer getId() { 
    return id; 
    } 

    public void setId(Integer id) { 
    this.id = id; 
    } 

    public String getName() { 
    return name; 
    } 

    public void setName(String name) { 
    this.name = name; 
    } 

} 

답변

1

주석은 기본적으로 구현이없는 인터페이스입니다. JPA는 API 사양이며 구현이 아닙니다. JPA API는 주석을 통해 액세스 할 수 있습니다. JPA는해야 할 일이 무엇인지, 어떻게해야하는지에 대해서는 말하지 않습니다.

Hibernate 또는 EclipseLink와 같은 특정 구현체는 컴파일시 및 런타임시 주석을 사용하여 기능을 구현합니다. 따라서 어노테이션은 자체 코드를 어디에 연결할지 또는 특정 객체를 처리하는 방법에 대한 구현을위한 표시입니다. 따라서 JPA를 사용할 때 Hibernate에서 대응하는 주석을 사용할 필요가 없다. 어노테이션은 표준 어노테이션이어야하고 Hibernate가이를 인식 할 수 있어야한다.

공급 업체별 특수 효과를 사용하는 경우 다른 API를 사용 중입니다. 이 다른 API는 동일한 구현을 사용할 수도 있지만 다른 방식으로 액세스합니다. 벤더 특정 주석을 가진 벤더 특정 API를 사용하면 JPA가 제공하지 않고 필요한 기능을 제공 할 때 유용합니다. 특히 JPA 2.0 이전에 Hibernate는 표준보다 훨씬 많은 것을 제공 했으므로 벤더 특정 API를 사용하는 것은 드문 일이 아니었다.

+0

고마워요. @his, 알겠습니다. 확실하지 왜 모든 올바른 답변을 수락하는 조항을 제공하지 않습니다 !! :) – user3448119

+0

그래서 그 생각은 하나의 올바른 최고의 대답에 관한 것입니다. 때로는이 원리가 효과가 없을 때도 있습니다. 그러나 당신은 항상 다른 유용한 답변을 upvote 수 있습니다. –

+0

당신 말이 맞아요. 그러나 나 같은 평판이 적은 사용자가 upvote 할 수있는 방법이 없다면 !! – user3448119

2

JPA는 다음과 같은 스펙입니다. 엔티티 클래스는 @ javax.persistence.Entity로 주석 된 클래스입니다. @ javax.persistence.Id로 주석 된 하나의 필드 또는 getter가 있어야합니다.

Hibernate는 사양이 말하는 것을 구현한다. 따라서 표준 JPA 주석을 사용합니다. 독점 주석을 사용한 경우 사양을 준수하지 않습니다. 그리고 스펙이 주석을 정의하지 않으면 모든 구현은 고유 한 주석을 정의해야하며 표준의 다양한 구현에서 작동 할 수있는 JPA 코드를 작성할 수는 없습니다.

+0

감사합니다. @JB Nizet, 알겠습니다. 업데이트 된 게시물에서 2) javax.persistence. * 패키지에 대해 Hibernate-Annotations jar를 사용해야합니까? 또는 JPA 특정 jar에서 가져온 것이므로 패키지 이름을 이해할 수 있도록 도와주십시오. – user3448119

+0

하지만이 예제에서는 최대 절전 모드를 사용하지 않습니다. 내 예제는 순전히 JPA 예제로 간주 될 수 있습니까? – user3448119

관련 문제