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
sozialen
add or update a child row: a foreign key constraint fails
(.
usuarios_grupos, CONSTRAINT
fk_usuariosFOREIGN KEY
id_usuario
() REFERENCES
usuarios(
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
) REFERENZENusuarios
(id_usuario
) ON DELETE NO ACTION ON UPDATE NO ACTION)
InformationsquelleAutor ShaunK | 2011-10-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehen die zugrunde liegenden generierten Abfrage durch
show_sql=true
,Das problem ist, dass Sie versuchen, insert - /update-Referenz ist nicht vorhanden.
Darauf aufbauend ist es auch möglich, zum abrufen einer Liste der join-Tabelle?
InformationsquelleAutor Jigar Joshi