Hibernate许多到多个完整性约束违规

时间:2014-07-21 10:05:45

标签: java database spring hibernate

我遇到了与hibernate映射的多对多关系的问题! 我有3张桌子:

  • 客户 - 包含有关客户的信息
  • 资源 - 包含有关资源的信息
  • ClientAccessResource - 包含客户有权访问的资源的信息!

My Schema

现在,一切正常,除非我尝试删除引用“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”但它没有用。

任何人都可以帮助我吗? 谢谢。

1 个答案:

答案 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;名字已经互换。我希望这能解决你的问题