2011-10-20 3 views
3

다음은 IdClass 세부 사항을 생략 한 축소 된 스 니펫입니다. 오전 데 문제는 테이블 정의는 다음과 같습니다JPA2 JoinColumns JoinColumn 이름을 준수하지 않습니다. (Hibernate 3.6 and H2)

ClientPersonalityModel 
(
client_id int not null, 
personality_trait_id int not null, 
personality_type_id int not null, 
primary key (client_id, personality_trait_id, personality_type_id) 
) 

그리고 클래스는 다음과 같습니다

@Entity 
public class ClientPersonalityModel 
{ 
    @Id 
    @ManyToOne 
    @JoinColumn(name="client_id") 
    protected ClientModel client; 

    @Id 
    @ManyToOne 
    @JoinColumns({ 
     @JoinColumn(name="personality_trait_id",referencedColumnName="id"), 
     @JoinColumn(name="personality_type_id",referencedColumnName="personality_type_id") 
    }) 
    protected ClientPersonalityTraitModel trait; 
} 

그러나 지속성 프레임 워크는 열 CLIENT_ID, TRAIT_ID, TRAIT_PERSONALITY_TYPE_ID를 사용하려고합니다.

@JoinColumn 이름이 무시되는 이유는 무엇입니까?

초기 sessionFactory에 creationfailed.org.hibernate.MappingException :

java.lang.ExceptionInInitializerError 테이블 client_personalities에 personality_type_id 실제 이름에서 논리적 열 이름을 찾을 수 없습니다에 의해 발생 : 조직

그것은 예외가 발생합니다 .hibernate.MappingException : 테이블 client_personalities의 물리적 이름 personality_type_id에서 논리 열 이름을 찾을 수 없습니다.

이 사례는 많은 예제에서 다루지 만 열 이름을 무시하지는 않습니다.

예 :

목록 10-12. 프로 JPA 2 (ISBN이 978-1-4302-1956-9/978-1-4302-1957-6)에서 종속 식별자

@Entity 
@IdClass(ProjectId.class) 
public class Project { 
    @Id private String name; 
    @Id 
    @ManyToOne 
    private Department dept; 
    // ... 
} 

와 프로젝트

+0

거기에 근본적인 문제가있는 것 같습니다. https://hibernate.onjira.com/browse/HHH-6754 –

답변

0

아마도 각각 @PrimaryKeyJoinColumns/@PrimaryKeyJoinColumn로 전환하려고합니다.

this case에서 도움이 되었기 때문에 같은 이유 일 수 있습니다.

+0

JPA2를 사용하고 있으므로이 경우를 피하기 위해이 작업을 수행 할 수 있어야합니다. . PRO JPA 2의 285 페이지를 참조하십시오. –

+0

@JasonPyeron 설명해 주셔서 감사합니다. JPA 2에서이 점이 변경되었음을 알지 못했습니다. – MaDa

관련 문제