java.sql.BatchUpdateException: kann Nicht hinzufügen oder aktualisieren ein child row: a foreign key constraint fails FEHLER

Ich habe dieses problem seit 2 Wochen jetzt, und ich habe stoßen mehrere Lösungen auf Stackoverflow und anderen Foren, aber ich bin noch nicht in der Lage zu finden, eine richtige Antwort.

Ich habe 3 Tabellen in meiner Datenbank: Users, UserGroups, und Groups.

Den Users haben eine one-to-many Beziehung mit UserGroups, und UserGroups
many-to-one mit Users.

Die Beziehung mit Groups und UserGroups ist das gleiche wie Users.

Ich bin mit JSF + HIBERNATE + PrimeFaces zu konstruieren, die meiner Anwendung. Also ich habe 3 Tabellen in meiner Ansicht 1 zeigt die Liste der Benutzer in meiner Datenbank, die andere zeigt die Liste der Gruppen, und schließlich die UserGroup-Daten-Tabelle zeigt die Liste der Benutzer und Gruppen.

sodass dieser Fehler

java.sql.BatchUpdateException: kann Nicht hinzufügen oder aktualisieren ein Kind Zeile:
foreign key constraint fails

ERSCHEINT, WENN ich wählen Sie einen Benutzer und eine Gruppe, und ich auf den "Einfügen" button. Der Benutzer und die Gruppe nicht in die Datenbank eingefügt Tisch.

Ich nicht denke, es ist ein mapping-Fehler, weil ich versucht, läuft eine test-Klasse durch manuelles einfügen von Werten in die Datenbank, und es funktioniert gut. Kann mir jemand helfen mit diesem?

- USER-Modell:

    @OneToMany(mappedBy="user", targetEntity=UsuariosGrupos.class,fetch= FetchType.EAGER,cascade= CascadeType.ALL)
    private List<UsuariosGrupos> usuariosgruposList;

    public Usuarios() {
    }


    @XmlTransient
    public List<UsuariosGrupos> getUsuariosgruposList() {
        return usuariosgruposList;
    }

    public void setUsuariosgruposList(List<UsuariosGrupos> usuariosgruposList) {
        this.usuariosgruposList = usuariosgruposList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idUsuario != null ? idUsuario.hashCode() : 0);
        return hash;
    }



    @Override
    public boolean equals(Object object) {
        //TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Usuarios)) {
            return false;
        }
        Usuarios other = (Usuarios) object;
        if ((this.idUsuario == null && other.idUsuario != null) || (this.idUsuario != null && !this.idUsuario.equals(other.idUsuario))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "br.model.Usuarios[ idUsuario=" + idUsuario + " ]";
    }

}

Benutzergruppen Modell:

@Entity
@Table(name = "usuarios_grupos")
public class UsuariosGrupos {

    private Integer id_usuario;
    private Integer id_grupo;

    private Usuarios user;

    @ManyToOne
    @JoinColumn(name="id_usuario", insertable=false, updatable=false)
       public Usuarios getUser() {
        return user;
    }

    public void setUser(Usuarios user) {
        this.user = user;
    }

    @Id
    @GeneratedValue
    public Integer getId_grupo() {
        return id_grupo;
    }

    public void setId_grupo(Integer id_grupo) {
        this.id_grupo = id_grupo;
    }

    public Integer getId_usuario() {
        return id_usuario;
    }

    public void setId_usuario(Integer id_usuario) {
        this.id_usuario = id_usuario;
    }
}

Gruppen-Modell:

    @Entity
    @Table(name="grupos")

    public class Grupos {
        private long id_grupo;
        private String descricao;

        private List<UsuariosGrupos> usergroup;

        @OneToMany(mappedBy = "group", targetEntity = UsuariosGrupos.class, fetch = FetchType.EAGER,
        cascade = CascadeType.ALL)
        public List<UsuariosGrupos> getUsergroup() {
            return usergroup;
        }

        public void setUsergroup(List<UsuariosGrupos> usergroup) {
            this.usergroup = usergroup;
        }

        @Id
        @GeneratedValue
        public String getDescricao() {
            return descricao;
        }

        public void setDescricao(String descricao) {
            this.descricao = descricao;
        }

        public long getId_grupo() {
            return id_grupo;
        }

        public void setId_grupo(long id_grupo) {
            this.id_grupo = id_grupo;
        }    
    }
    `

    Index.xhtml (view) :

          <h:commandButton value="Incluir" actionListener="#{usuariosGruposBean.finishAddUsuariosGrupos}">
                            <f:param name="#{usergroups}" value="#{usergroups}"/>
                        </h:commandButton>

Meine UserGroups Bean:

   @ManagedBean
@SessionScoped
public class UsuariosGruposBean {

    private Usuarios user;
    private UsuariosGrupos userGroups = new UsuariosGrupos();
    private UsuariosGruposDAO userDAO = new UsuariosGruposDAO();
    private UsuariosGruposDAO grpDAO = new UsuariosGruposDAO();
    private UsuariosGruposDAO userGrpDAO = new UsuariosGruposDAO();
    private List<Usuarios> listOfUsuarios;

    private List<UsuariosGrupos> listOfUserGroups;

    public List<Usuarios> getListOfUsuarios() {
        List<Usuarios> usuariosList = userDAO.retrieveUsuarios();
        listOfUsuarios = usuariosList;
        return listOfUsuarios;
    }



    public List<UsuariosGrupos> getListofUserGroups() {
        List<UsuariosGrupos> userGrpList = userGrpDAO.retrieveUsuariosGrupos();
        listOfUserGroups = userGrpList;
        return listOfUserGroups;
    }




    public Usuarios getUser() {
        return user;
    }

    public void setUser(Usuarios user) {
        this.user = user;
    }

    public UsuariosGrupos getUserGroups() {
        return userGroups;
    }

    public void setUserGroups(UsuariosGrupos userGroups) {
        this.userGroups = userGroups;
    }


    public void finishAddUsuariosGrupos() {
        userGroups.setId_usuario(62);
        userGroups.setId_grupo(2);
        userGrpDAO.saveUsuariosGrupos(userGroups);
        listOfUserGroups = null;
    }



}




    This is the error stack that I face when I attempt to add a user and a group to usergroups:

Out 21, 2011 10:15:26 UHR
org.hibernate.impl.SessionFactoryObjectFactory addInstance
INFO: Keine Bindung factory JNDI, keine JNDI-Namen konfiguriert
Aus 21, 2011 10:15:33 UHR org.hibernate.util.JDBCExceptionReporter logExceptions WARNUNG: SQL
Fehler: 1452, SQLState: 23000 Out 21, 2011 10:15:33 UHR
org.hibernate.util.JDBCExceptionReporter logExceptions SEVERE: Cannot
add or update a child row: a foreign key constraint fails
(
sozialen.usuarios_grupos, CONSTRAINTfk_usuariosFOREIGN KEY
(
id_usuario) REFERENCESusuarios(id_usuario) ON DELETE NO
ACTION ON UPDATE NO ACTION) Out 21, 2011 10:15:33 AM

org.hibernate.event.def.AbstractFlushingEventListener
performExecutions SCHWERWIEGEND: could not synchronize database state with
Sitzung org.hibernate.Ausnahme.ConstraintViolationException: Könnte
nicht execute JDBC batch update
org.hibernate.Ausnahme.SQLStateConverter.konvertieren(SQLStateConverter.java:71)
bei
org.hibernate.Ausnahme.JDBCExceptionHelper.konvertieren(JDBCExceptionHelper.java:43)
bei
org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253)
bei
org.hibernate.Motor.ActionQueue.executeActions(ActionQueue.java:237)
bei
org.hibernate.Motor.ActionQueue.executeActions(ActionQueue.java:141)
bei java.lang.Thread.run(Thread.java:722), Verursacht durch:
java.sql.BatchUpdateException: kann Nicht hinzufügen oder aktualisieren ein Kind Zeile:
foreign key constraint fails (social.usuarios_grupos, EINSCHRÄNKUNG
fk_usuarios FOREIGN KEY (id_usuario) REFERENZEN usuarios
(id_usuario) ON DELETE NO ACTION ON UPDATE NO ACTION)

Wir stehen vor demselben Problem irgendwelche Lösungen für diese.

InformationsquelleAutor ShaunK | 2011-10-21

Schreibe einen Kommentar