약간의 문제가있다. 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는 잘 작동합니다.
나는 그런 문제를 생각하고 있었지만 Cross 엔티티에 JoinTable 어노테이션이 없다고해도 같은 오류가있다. –
'mappedBy = "cross"'? –
예, 분명히 좋았 기 때문에 그것을 변경하고 보관하십시오. 그러나 그것은 계속 실패하고 있습니다. –