4
我有很多對許多像這樣的休眠定義的關係:錯誤的更新而級聯許多一對多的關係
用戶
public class User{
private List<UserCustomer> userCustomerList;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "id.user", cascade=CascadeType.ALL)
public List<UserCustomer> getUserCustomerList() {
return userCustomerList;
}
}
UserCustomer
@Entity
@Table(name = "RTDB_USER_CUSTOMER")
@Component("userCustomerEntity")
@AssociationOverrides({
@AssociationOverride(name = "id.user",
joinColumns = @JoinColumn(name = "ID_USER")),
@AssociationOverride(name = "id.customer",
joinColumns = @JoinColumn(name = "ID_CUSTOMER")) })
public class UserCustomer {
@EmbeddedId
public UserCustomerId getId() {
return id;
}
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumns({ @JoinColumn(name = "ID_ROLE_CUSTOMER", referencedColumnName = "ID") }) public RoleCustomer getRoleCustomer() {
return roleCustomer;
}
}
因此,用戶有一個UserCustomer列表,表示用戶對客戶的角色。問題是,當我們改變客戶的角色並致電update()
,而不是更新一行時,我們會獲得所有更新的行都具有相同的角色。當我們調用merge()
時,它開始執行大量查詢,然後給出stackoverflow
例外情況¿這可能是映射問題嗎?
是否有你有連接表(USER_CUSTOMER)的實體的原因?在JPA中這不是傳統的做法 –
是的,這是因爲連接表具有附加屬性(角色)。有沒有辦法做到這一點? –
好吧,我錯過了,你有用戶,客戶和USER_CUSTOMER有用戶ID,客戶ID和角色? –