2010-07-06 1 views
3

내 JPA 2.0 문서 (및 온라인 설명서)에 따르면 단일 엔터티 또는 엔터티 계층 내에서 필드 및 속성 액세스를 혼합 할 수 있어야합니다. 클래스의 @Access의 주석은 기본 액세스를 지정합니다. 필드 또는 속성에 배치 할 때 getter @Access는이 필드에 대해 기본값을 재정의해야한다고 지정할 수 있습니다.@Access와 관련하여 JPA를 준수하지 않는 최대 절전 모드입니까?

@Entity 
@Access(AccessType.FIELD) 
Class Foo { 

    @Id 
    int id; 

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

    @Column(name = "myProp") 
    @Access(AccessType.PROPERTY) 
    public int getMyProp() { 
    return 3; 
    } 

    public void setMyProp (int p) { 
    // do nothing 
    } 
} 

이 클래스의 결과는 3 개의 열이있는 테이블이어야합니다. 그러나 그것은 Hibernate를 가지고 있지 않다 ... "myProp"컬럼은 테이블에서 빠져있다. Hibernate는 엔티티 ID로부터 그것의 필드 vs 속성 큐를 취하여 그것으로 실행하기 때문에 ... @Access와 관련하여 JPA 스펙을 완전히 무시한다. .

누구든지 이것을 확인하거나 어딘가 어리석은 실수를 할 수 있습니까?

답변

1

HHH-5004과 비슷한 (비슷하지만 비슷하지 않은) 이슈를 보아 왔기 때문에 새로운 것일 수도 있습니다. (TCK는 완전하지는 않습니다.) 하지만 Hibernate의 어떤 버전을 사용하고 있습니까? 최신 버전을 사용해 보셨습니까?

+0

최대 절전 모드 3.5.3-FINAL로했습니다. 저는 HHH-5004를 보았습니다. 문제가 아니기 때문에 "@Access"가 Hibernate 커뮤니티에서 전혀 사용되지 않는다고 생각하게되었습니다. 저기있는 버그를 열어야한다고 생각하세요? – HDave

+0

@HDave : 이것은 (필자는 일반적으로 EclipseLink와 같은 다른 구현으로 동작을 두 번 확인한 후) 사양의 관련 부분과 RI와 함께 작동한다는 사실을 언급합니다. 테스트 케이스는 종종 환영받을 수 있으며 상황을 더 빨리 고정시키는 데 도움이됩니다. –

1

문서를 기반으로 작성한 코드가 올바른 것 같습니다. 필드 int id에 주석을 달았 기 때문에 상단의 @Access (AccessType.FIELD) 주석은 필요하지 않습니다. 이것은 필드 접근을 사용하기 위해 최대 절전 모드를 지시한다. 나는 annotation과 xml config가 섞인 매우 비슷한 예제를 시도했다. 이것은 동일한 행동으로 이어지므로 아마도 최대 절전 모드의 버그 일 것입니다. 유월 17 일 현재 최신 버전 -

나는 최대 절전 모드 3.5.3