我遇到了与hibernate映射的多对多关系的问题! 我有3张桌子:
现在,一切正常,除非我尝试删除引用“clients_access_resources”的资源时,它会提供“参照完整性约束违规”。 但奇怪的是,如果我删除了一个引用“clients_access_resource”的客户端,它就可以了,这里没问题!
客户端
@ManyToMany(fetch = FetchType.EAGER, targetEntity=Resources.class)
@JoinTable(name = "clients_access_resources", joinColumns = { @JoinColumn(name = "client_id") }, inverseJoinColumns = { @JoinColumn(name = "res_id") })
public Set<Resources> getClientResources() {
return this.clientResources;
}
资源
@ManyToMany(fetch = FetchType.EAGER, mappedBy = "clientResources")
public Set<ClientsBasic> getClientsBasics() {
return this.clientsBasics;
}
资源DAO
public void delete(Resources res) throws HibernateException{
synchronized (this) {
Transaction tx = null;
session = this.sessionFactory.openSession();
tx = session.beginTransaction();
session.delete(res);
tx.commit();
session.close();
}
}
客户端DAO
public ClientsBasic save(ClientsBasic client) throws HibernateException {
synchronized (this) {
Transaction tx = null;
session = this.sessionFactory.openSession();
tx = session.beginTransaction();
session.saveOrUpdate(client);
tx.commit();
session.close();
return client;
}
}
我试图添加“cascade = CascadeType.ALL”但它没有用。
任何人都可以帮助我吗? 谢谢。
答案 0 :(得分:4)
客户端getter的resourses类中的映射属性使得此方面成为关系的反面。为了使这些关系在管理关系方面保持平等,将其更改为与此类
中的客户端类相同<强>资源强>
@ManyToMany(fetch = FetchType.EAGER, targetEntity=ClientsBasic.class)
@JoinTable(name = "clients_access_resources",
joinColumns = {@JoinColumn(name ="res_id")},
inverseJoinColumns = {@JoinColumn(name = "client_id")})
public Set<ClientsBasic> getClientsBasics() {
return this.clientsBasics;
}
注意列&#39;名字已经互换。我希望这能解决你的问题