簡體   English   中英

在ManyToOne關系上,JPA和EclipseLink的級聯持續錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM