我有一個簡單的OneToMany關聯2對象Parent & Child如下所示。調用EntityManager.merge()時沒有設置Id EntityManager.merge()
母實體
@Entity
public class Parent {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@Version
private Long version;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
List<Child> children = new ArrayList<Child>();
....
}
兒童實體
@Entity
public class Child {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@Version
private Long version;
...
}
以下是我的測試,加載現有的父增加了孩子和家長呼籲EntityManager.merge()。
@Test
public void testParent(){
Parent parent = (Parent) dao.loadParent(Parent.class, parentId);
Child c = new Child();
c.setName("c");
parent.getChildren().add(c);
dao.mergeEntity(parent);
Assert.assertNotNull(c.getId());
}
測試ID的主鍵的斷言失敗。我看到記錄與自動分配的主鍵一起正確插入到數據庫中。
我所有的DAO調用都被包裝在具有傳播的事務中(如需要)。
你應該給更多的信息,這是一個彈簧或EJB應用程序?.. – 2011-06-01 07:55:28
你能張貼dao.mergeEntity(父母)的代碼? – Sylar 2011-06-01 07:55:47
事務由彈簧以下處理是我的DAO代碼@Transactional(傳播= Propagation.REQUIRED) \t公共對象mergeEntity(對象實體){ \t \t返回em.merge(實體); \t} – Rakesh 2011-06-01 07:57:30