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和角色? –