[英]Cascade persist error with JPA and EclipseLink on ManyToOne relationship
將JPA與EclipseLink一起使用時,我有2個類:用戶和地址。
簡化一下,在同一筆交易中,我創建了一個新用戶,一個新地址,並將該地址添加到該用戶,知道每個用戶可以有許多地址:
User = new User();
Address address= new Address();
user.addAddress(address);
這是User類中的映射:
@OneToMany(mappedBy = "idUser")
private Set<Address> addresses;
這是Address類中的映射:
@ManyToOne(cascade = { javax.persistence.CascadeType.REFRESH, javax.persistence.CascadeType.MERGE })
@JoinColumn(name = "id_user", referencedColumnName = "id", nullable = false)
private User user;
我正在使用一個Spring Data JPA自定義存儲庫,在其中注入了objectmanager並從服務中調用了它:
public void saveUser(TUsuario user)
{
em.persist(user);
}
之后,我堅持住地址
address.setDay(1);
address.setMonth(2);
address.setYear(3);
address.setUser(user);
public void saveUserAddress(Address address)
{
em.persist(address);
}
最后,當服務方法完成時,就完成了交易。
當我嘗試提交thansaction時,出現錯誤:
'A new object was found through a relationship that was not marked cascade PERSIST'
如果我將用戶地址列表標記為層疊PERSIST,則eclipselink會嘗試將用戶保存兩次(我認為當我保留用戶時一個,而第二次當用戶地址持久時)。
我該如何做才能使eclipselink不持久化,而是將其檢測為現有對象?
PS:我嘗試使用merge而不是persist,但沒有用。
一個錯誤是:
@OneToMany(mappedBy = "user")//you have idUser
然后添加嘗試以下操作:
User user = new User();
Address address = new Address();
address.setUser(User);
user.addAddress(address);
em.persist(user);//you can delete this, if you add PERSIST (address.user field) to the @ManyToOne(cascade = { javax.persistence.CascadeType.REFRESH, javax.persistence.CascadeType.MERGE })
em.persist(address);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.