2014-10-28 2 views
0

약간의 문제가있다. PostgreSQL의 루트 테이블에 엔티티를 정의하는 슈퍼 클래스가있다.Hibernate는 @JoinTable에 대한 이름 인자를 사용하지 않는다

이 클래스는 2 명 상속 나는 @OneToOne 테이블 협회에 가입 추가 할 테이블/클래스의 실체를 가지고 :

@Entity 
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
@Table(name = "equipement") 
public abstract class Equipement 
{ 
    .... 
} 

@Entity 
@Table(name = "nod") 
public class Nod extends Equipement 
{ 
    protected Cross cross; 

    @OneToOne(cascade = CascadeType.ALL, optional = true, fetch = FetchType.EAGER) 
    @JoinTable(name = "assoc_nod_cross", joinColumns = @JoinColumn(name = "nod_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "cross_id", referencedColumnName = "id")) 
    public Cross getCross() 
    { 
     return cross; 
    } 

    ... 
} 

@Entity 
@Table(name = "cross") 
public class Cross extends Equipement 
{ 
    protected Nod nod; 

    @OneToOne(cascade = CascadeType.ALL, optional = true, fetch = FetchType.EAGER) 
    @JoinTable(name = "assoc_nod_cross", joinColumns = @JoinColumn(name = "cross_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "nod_id", referencedColumnName = "id")) 
    public Nod getNod() 
    { 
     return nod; 
    } 

    ... 
} 

목록 모든 놋 또는 크로스 엔티티, Hibernate는에서 inverseJoinColumns 필드에 검색 할 때 잘못된 테이블, 그것은 (assoc_nod_cross) 이름을 사용하지 않습니다, 나는 심지어 아무것도 넣을 수 있습니다.

샘플 : 그것 때문에 @Inheritance 전략의 문제

Hibernate: select cross0_.id as id1_7_, cross0_.nod_id as nod_id2_1_ from cross cross0_ 

javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet 
... 
Caused by: org.postgresql.util.PSQLException: ERROR: column cross0_.node_id does not exist 

인가? 최대 절전 모드 버그입니까? 내 개체 정의에 문제가 있습니까?

추가 정보 : EclipseLink로 전환하여 최대 절전 모드 버그/제한 사항인지 또는 어딘지 잘못되었는지 확인하려고했습니다. 그리고 EclipseLink는 잘 작동합니다.

답변

0

CrossNod 사이의 양방향 관계입니까? 그렇다면 관계의 양면에 이런 식으로 주석을 달 필요가 없습니다. 이것이 최대 절전 모드를 혼동시킬 수 있습니다. Here이 그 예입니다. 나는 이것을해야한다고 생각한다.

@Entity 
@Table(name = "nod") 
public class Nod extends Equipement 
{ 
    protected Cross cross; 

    @OneToOne(cascade = CascadeType.ALL, optional = true, fetch = FetchType.EAGER) 
    @JoinTable(name = "assoc_nod_cross", joinColumns = @JoinColumn(name = "nod_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "cross_id", referencedColumnName = "id")) 
    public Cross getCross() 
    { 
     return cross; 
    } 

    ... 
} 

@Entity 
@Table(name = "cross") 
public class Cross extends Equipement 
{ 
    protected Nod nod; 

    @OneToOne(mappedBy = "cross") 
    public Nod getNod() 
    { 
     return nod; 
    } 

    ... 
} 
+0

나는 그런 문제를 생각하고 있었지만 Cross 엔티티에 JoinTable 어노테이션이 없다고해도 같은 오류가있다. –

+0

'mappedBy = "cross"'? –

+0

예, 분명히 좋았 기 때문에 그것을 변경하고 보관하십시오. 그러나 그것은 계속 실패하고 있습니다. –

관련 문제