Hibernate删除多对多关联并重新插入相同的关系数据

时间:2015-09-13 12:28:13

标签: hibernate

朋友们,我有以下情况:

1-插入一个具有多对多角色的User对象。 2-当我更改用户并更改任何属性时,它会删除与角色的任何关系(JoinTable)并再次插入O_o! 3在stackTrace下面:

Hibernate: update usu_usuario set usu_versao=?, usu_nome=? where usu_id=? and usu_versao=?
Hibernate: delete from usa_usuario_autorizacao where usu_id=?
Hibernate: insert into usa_usuario_autorizacao (usu_id, aut_autorizacao) values (?, ?)

实现了equals和hashCode。

我手动测试了equals并通知校对是相同的。我不明白他以不同的方式看待它并应用级联。

另一个重要信息:Esotu us并希望AngualrJS和Jackson制作JSON解析器。我看到答案并发送对象并且在开始更新之前是相同的信息我在集合中检查了equals并返回true。真的不明白。

@ManyToMany
    @Cascade({ CascadeType.ALL })
    @JoinTable(
            name = "usa_usuario_autorizacao",
            joinColumns = { @JoinColumn(name = "usu_id", table = "usu_usuario"), },
            inverseJoinColumns = { @JoinColumn(name = "aut_autorizacao", table = "aut_autorizacao") })
    private List<Autorizacao> autorizacoes;

...

@Override
    public int hashCode () {
        final int prime = 31;
        int result = super.hashCode();
        result = prime * result + ((autorizacoes == null) ? 0 : autorizacoes.hashCode());
        result = prime * result + ((autorizacoesAutorizacoes == null) ? 0 : autorizacoesAutorizacoes.hashCode());
        result = prime * result + ((confirmacaoSenha == null) ? 0 : confirmacaoSenha.hashCode());
        result = prime * result + ((email == null) ? 0 : email.hashCode());
        result = prime * result + ((nome == null) ? 0 : nome.hashCode());
        result = prime * result + ((senha == null) ? 0 : senha.hashCode());
        result = prime * result + ((senhaAntiga == null) ? 0 : senhaAntiga.hashCode());
        return result;
    }

    @Override
    public boolean equals (Object obj) {
        if (this == obj)
            return true;
        if (!super.equals(obj))
            return false;
        if (getClass() != obj.getClass())
            return false;
        Usuario other = (Usuario) obj;
        if (autorizacoes == null) {
            if (other.autorizacoes != null)
                return false;
        } else if (!autorizacoes.equals(other.autorizacoes))
            return false;
        if (autorizacoesAutorizacoes == null) {
            if (other.autorizacoesAutorizacoes != null)
                return false;
        } else if (!autorizacoesAutorizacoes.equals(other.autorizacoesAutorizacoes))
            return false;
        if (confirmacaoSenha == null) {
            if (other.confirmacaoSenha != null)
                return false;
        } else if (!confirmacaoSenha.equals(other.confirmacaoSenha))
            return false;
        if (email == null) {
            if (other.email != null)
                return false;
        } else if (!email.equals(other.email))
            return false;
        if (nome == null) {
            if (other.nome != null)
                return false;
        } else if (!nome.equals(other.nome))
            return false;
        if (senha == null) {
            if (other.senha != null)
                return false;
        } else if (!senha.equals(other.senha))
            return false;
        if (senhaAntiga == null) {
            if (other.senhaAntiga != null)
                return false;
        } else if (!senhaAntiga.equals(other.senhaAntiga))
            return false;
        return true;
    }

...

0 个答案:

没有答案