0
我有一個人物,一個電腦物體, 這個人物有一個名爲computer的字段, 一個人可以有一臺電腦,一對一的關係。級聯類型:ALL,MERGE等
class Person{
@OneToOne(cascade=CascadeType.ALL)//in which situations this is true?
@JoinColumn(name = "computer_id",nullable=false)
private Computer computer;
getComputer(){...}
setComputer(Computer c){...}
@Id
private String id;
}
class Computer{
@Id
private String id;
}
讓我假設我在數據庫上有一個計算機對象,並使用加載方法得到它。
Computer computer=entityManager.loadById({an id});
Person p=new Person();
p.setComputer(computer);
現在,如果我想同時保存電腦和個人,我應該怎麼做?
entityManager.persist(p);
我不能生成相同的錯誤,但前一段時間我得到了「分離的實體傳遞到持久」錯誤。
什麼是最合適的方式將所有內容保存到數據庫而不重複?
另外,你也可以建議一個資源(一本書也許)瞭解在不同情況下做什麼。
非常感謝您的回覆。我想問,什麼時候「堅持」消失。你說當我打電話堅持後,做出改變,它會去分貝,但直到什麼時候?之後,我的對象失去了持久性。例如一個方法:'公共計算機foo(){計算機c =新計算機(); em.persist(c);}'在main中我調用foo'Computer comp = foo();''Person person = new Person(); person.add(COMP); em.persist(person);' – merveotesi
直到實體變爲分離狀態,即圍繞這些調用的事務被提交或回滾時。如果您序列化和反序列化實體,則生成的實體也會分離。 –