![](/img/trans.png)
[英]Cascade persist error with JPA and EclipseLink on ManyToOne relationship
[英]JPA persist object in a ManyToOne relationship
我的數據庫中有一個公司/員工@OneToMany
關系定義為:
@Entity
public class Employee {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
@ManyToOne @JoinColumn(name="companyid")
Company company;
....
}
@Entity
public class Company {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
...
}
現在我將一個新創建的員工添加到一個獨立的公司。 我使用的代碼是這樣的:
Company company = em1.find(Company.class, 555L);
em1.close();
EntityTransaction et = em2.getTransaction();
et.begin();
Employee employee = new Employee();
employee.company = company;
em2.persist(employee);
et.close();
這項工作可以嗎?
hibernate會將公司合並到第二個EntityManager中,還是僅使用其id並持久保存員工對象?
可能會以某種方式復制我的公司對象或者拋出異常,說明DB中已存在具有相同ID的公司?
Company
的id
將在持久化Employee
對象時使用,但Company
本身不會被合並(請注意, Employee
是關系的擁有方) Company
是暫時的而不是分離的,那么您將獲得“對象引用未保存的瞬態實例”錯誤 cascade = CascadeType.PERSIST
,則會出現“已分離的實體傳遞給持久化”錯誤。 來自JPA規范:
如果X是托管實體,則會將其同步到數據庫。
- 對於來自X的關系引用的所有實體Y,如果與Y的關系已使用級聯元素值cascade = PERSIST或cascade = ALL進行注釋,則將持久化操作應用於Y.
- 對於來自X的關系引用的任何實體Y,其中與Y的關系未使用級聯元素值cascade = PERSIST或cascade = ALL進行注釋:
- 如果Y是新的或被刪除,則刷新操作(以及標記為回滾的事務)將拋出IllegalStateException,否則事務提交將失敗。
- 如果分離Y,則語義取決於關系的所有權。 如果X擁有該關系,則對該關系的任何更改都將與數據庫同步; 否則,如果Y擁有關系,則行為未定義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.