私は 2 つの非常に単純なオブジェクトを持っており、一方のオブジェクトにはもう一方のオブジェクトを「1 対多」の関係でセットに含める必要があります。オブジェクトはデータベースに正しく挿入されますが、「子」テーブルの外部キーは常に「null」です。
理由がわかりません:
これはテスト オブジェクトであり、そのセットに子を保持します。
@Entity
@Table(name="test")
public class TestObj {
public TestObj(){}
private Long id;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
private Set<Children> children = new HashSet<Children>();
@OneToMany(mappedBy = "testObj", cascade = CascadeType.ALL)
public synchronized Set<Children> getChildren() {
return children;
}
public synchronized void setChildren(Set<Children> children) {
this.children = children;
}
public void addChildren(Children child){
children.add(child);
}
}
これは子オブジェクトで、"TestObj" への後方リンクを保持しています。
@Entity
@Table(name = "children")
public class Children {
public Children(){}
private Long id;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
private TestObj testObj;
@ManyToOne
@JoinColumn
public TestObj getTestObj() {
return testObj;
}
public void setTestObj(TestObj testObj) {
this.testObj = testObj;
}
}
このオブジェクトを次のコードで永続化します。
EntityManagerFactory entityManagerFactory = HibernateEntityMangerSingelton.getEntityManagerFactory();
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
TestObj user = new TestObj();
Children child = new Children();
user.addChildren(child);
try {
entityManager.persist(user);
entityManager.getTransaction().commit();
} catch (Exception e) {
System.out.println(e);
}finally{
entityManager.close();
}
なぜこれが起こっているのか説明できますか?