2013-10-06 2 views
-1

끝에 2 개의 일대일 관계를 만들면 2 개 중 하나만 저장되고 다른 하나는 null이됩니다. 당신이 MFUITVOERINGJOIN 만이 개 아이디의 저장 볼 수있는 SQL 추적에서 최대 절전 모드 다중 관계가 작동하지 않습니다.

는 3 저장해야하는 경우 : S

여기에 뭔가 문제가 있습니까?

@Entity 
@Table(name = "STUD1630651.MFUITVOERING") 
public class Uitvoering { 

@Id 
@GeneratedValue(strategy=GenerationType.AUTO, generator="my_entity_seq_gen") 
@SequenceGenerator(name="my_entity_seq_gen", sequenceName="HIBERNATE_SEQUENCE_UITVOERING") 
@Column(name = "ID") 
private int id; 

@Column(name = "DATUM") 
private String datum; 

@Column(name = "SCHOUWBURG") 
private String schouwburg; 

@OneToOne(cascade=CascadeType.ALL) 
@JoinTable(name="MFUITVOERINGJOIN",joinColumns= 
{@JoinColumn(name="UITVOERINGID")}, 
inverseJoinColumns={@JoinColumn(name="DIRIGENTID")}) 
private Dirigent dirigent; 

@OneToOne(cascade=CascadeType.ALL) 
@JoinTable(name="MFUITVOERINGJOIN",joinColumns= 
{@JoinColumn(name="UITVOERINGID")},inverseJoinColumns= 
{@JoinColumn(name="MUZIEKSTUKID")}) 
private Muziekstuk muziekstuk; 


public Uitvoering(String datum, String schouwburg, Dirigent dirigent, Muziekstuk muziekstuk){ 
    this.datum = datum; 
    this.schouwburg = schouwburg; 
    this.dirigent = dirigent; 
    this.muziekstuk= muziekstuk; 
} 

//GETTERS AND SETTERS 

SQL 추적 :

Hibernate: select dirigent0_.ID as ID1_3_0_, dirigent0_.KLASSE as KLASSE2_3_0_, dirigent0_.LAND as LAND3_3_0_, dirigent0_.NAAM as NAAM4_3_0_, dirigent0_.RICHTING as RICHTING5_3_0_ from STUD1630651.MFDIRIGENT dirigent0_ where dirigent0_.ID=? 
Hibernate: select muziekstuk0_.ID as ID1_5_1_, muziekstuk0_.GENRE as GENRE2_5_1_, muziekstuk0_.TITEL as TITEL3_5_1_, muziekstuk0_1_.INSTRUMENTID as INSTRUME2_0_1_, instrument1_.ID as ID1_4_0_, instrument1_.HOEVEELHEID as HOEVEELH2_4_0_, instrument1_.NAAM as NAAM3_4_0_ from STUD1630651.MFMUZIEKSTUK muziekstuk0_ left outer join MFMUZIEKSTUKJOIN muziekstuk0_1_ on muziekstuk0_.ID=muziekstuk0_1_.MUZIEKSTUKID left outer join STUD1630651.MFINSTRUMENT instrument1_ on muziekstuk0_1_.INSTRUMENTID=instrument1_.ID where muziekstuk0_.ID=? 
Hibernate: select HIBERNATE_SEQUENCE_UITVOERING.nextval from dual 
Hibernate: insert into STUD1630651.MFUITVOERING (DATUM, SCHOUWBURG, ID) values (?, ?, ?) 
Hibernate: insert into MFUITVOERINGJOIN (MUZIEKSTUKID, UITVOERINGID) values (?, ?) 

답변

1

난 당신이 잘못된 위치에 @OneToOne 주석을 사용하는 것 같아요.
두 테이블에 the same primary key 개의 열이있을 때 일대일 어노테이션이 사용됩니다.

테이블 A (부)의 레코드에 대해 일대일로 표시하면 테이블 B (하위)에 레코드가 하나만 있어야합니다.
데이터베이스 수준에서이 값은 having a foreign key of A in B table, when this foreign key column(s) in B table is(are) marked as primary key of B입니다.
기술적으로 하나 이상의 자식 테이블에 일대일 관계를 가질 수 없습니다.

귀하의 질문에 MFUITVOERING 자식 테이블로 ID라는 소유의 기본 키 (시퀀스 값을 가진 필드)가 있습니다.
MFUITVOERINGJOIN의 두 외래 키는 MFUITVOERING에 있으며 ManyToOne 관계를 나타냅니다.
@ManyToOne 주석을 사용해야합니다.

관련 문제