2009-04-27 17 views
1
@TableGenerator(name = "trial", table = "third", 
     pkColumnName = "a" , valueColumnName = "b", pkColumnValue = "first") 

@Entity 

public class First{ 

    @Id 
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "trial") 
    protected int a; 

    @OneToMany(mappedBy ="first", cascade = CascadeType.PERSIST) 
    @JoinColumn(name = "a") 
    protected List<Second> seconds; 
} 

@Entity 

public class Second{ 

    @Id 
    protected int a; 

    @ManyToOne 
    @JoinColumn(name = "b") 
    First first; 
} 

私がメインで、以下を実行します。これは、第二表の列「B」にNULLを設定自動生成された値を取得するにはどうすればよいですか?

Second aSecond = new Second(); 

aSecond.a = 2; 

First aFirst = new First(); 

List<Second> scnds = new ArrayList<Second>(); 
scnds.add(aSecond); 

aFirst.seconds = scnds; 

aEntityManager.getTransaction().begin(); 

aEntityManager.persist(aFirst); 

aEntityManager.getTransaction().commit(); 

? はどうすればFirstaで自動作成された値がSecondbに設定することで入手できますか?

答えて

1

物事のカップル:

まず:あなたはファーストクラスで秒コレクションの@JoinColumn(名=「A」)の注釈を必要としません。マッピングは第2クラスによって処理されています。

次へ:

Second aSecond = new Second(); 
aSecond.a = 2; 
First aFirst = new First(); 

//its a bi-directional mapping so you have to set the references both ways 
aFirst.seconds.add(aSecond); 
aSecond.first = aFirst; 

aEntityManager.getTransaction().begin(); 
aEntityManager.persist(aFirst); 
aEntityManager.getTransaction().commit(); 
+0

は、私は2番目の質問をしてもらえますか? @ManyToOne @JoinColumn(name = "a"、insertable = false、updatable = false)まず、最初に最初に " – Moro

関連する問題