2010-11-26 15 views
1

JPAを使用して、2つのクラス(親と子)の間に一対一の関連付けを作成しようとしています。外部キー制約違反共有プライマリキーとの双方向1対1の関係

@Entity 
public class TestFKParent { 

    @Column(name="code", nullable=false)  
    @Id 
    private String code; 

    @OneToOne(mappedBy="parent", targetEntity=TestFKChild.class, optional=false)  
    @org.hibernate.annotations.Cascade({CascadeType.ALL}) 
    @PrimaryKeyJoinColumn 
    private TestFKChild child; 

    // getters and setters 
} 

@Entity 
public class TestFKChild { 

    @Column(name="id", nullable=false) 
    @Id 
    @GeneratedValue(generator="MyGen") 
    @org.hibernate.annotations.GenericGenerator(name="MyGen", 
      strategy="foreign",parameters = @Parameter(name = "property", value = "parent"))  
    private String ID; 

    @OneToOne(targetEntity=TestFKParent.class, optional=false) 
    @org.hibernate.annotations.Cascade({}) 
    @PrimaryKeyJoinColumn 
    private TestFKParent parent; 

    // getters and setters 
} 

私はこのコードでオブジェクトを永続化:

public void testMerge() throws Exception 
{ 
    TestFKParent parent = new TestFKParent(); 
    parent.setCode("foo"); 
    TestFKChild child = new TestFKChild(); 
    parent.setChild(child); 
    child.setParent(parent); 

    em.merge(parent); 
} 
彼らは同じ主キーを持っていることを確認するための発電機

しかし残念ながら、私は、外部キー違反入手:

com.sybase.jdbc3.jdbc.SybSQLException: Foreign key constraint violation occurred, dbname = 'MYDB', table name = 'TestFKChild', constraint name = 'FKE39B2A659CF5145B' 

は、ログを見てみると、最初の子を保持しようとするようだが、これは私がTestFKParent親の外部キーを持って、このTestFKChildテーブルにあります。

JPA/Hibernateでこの種の関係を記述する適切な方法は何ですか?

答えて

0

あなたは、親と子の間の1つの関係で1つを作成しようとしていると述べました。

ここで私は知りたかったです why are you keeping Parent class as a memeber variable in Child class?

関連する問題