Kann nicht hinzufügen oder aktualisieren ein child row: a foreign key constraint fails - Bidirektionales mapping in hibernate
Hallo ich habe ein problem mit JPA...
DB:
Java-Klassen (irrelevante Felder sind weggelassen):
Benutzer:
@Entity
public class User{
@Id
private int iduser;
//bi-directional many-to-one association to UserInfo
@OneToMany(mappedBy="user", cascade= {CascadeType.ALL}, fetch=FetchType.EAGER)
private List<UserInfo> userInfos;
}
UserInfo:
@Entity
@Table(name="user_info")
public class UserInfo {
@Id
@Column(name="iduser_info")
private int iduserInfo;
//bi-directional many-to-one association to User
@ManyToOne
private User user;
}
Derzeit, wenn ich versuche, dies zu tun (habe ich wieder weggelassen-Einstellung irrelevant Felder):
User u = new User();
UserInfo info = new UserInfo();
u.addUserInfo(info);
em.persist(u); //save user
Bekomme ich diesen Fehler:
Cannot add or update a child row: a foreign key constraint fails (`webstore`.`user_info`, CONSTRAINT `fk_user_info_user` FOREIGN KEY (`user_iduser`) REFERENCES `user` (`iduser`) ON DELETE NO ACTION ON UPDATE NO ACTION)
Ich habe schlug meinen Kopf den ganzen Tag und ich kann es nicht herausgefunden... ich habe auch nach Lösungen gesucht, hier aber Sie schlagen vor, dass dieser Fehler zeigt, dass ich möchte geben Sie UserInfo ohne user_iduser Wert eingegeben, aber selbst wenn ich dies vor bestehen:
info.setUser(u);
es immer noch nicht funktioniert - ist die bidirektionale Zuordnung noch unterstützt mit cascading? Der gewünschte Effekt ist, dass Benutzer eingefügt werden soll und dann alle UserInfos in der Liste, nachdem es sich der ursprüngliche Benutzer. Wie kann ich das erreichen?
Ich will nicht zu tun,
SET foreign_key_checks = 0/1;
everytime =(
- Bevor Sie bleiben, haben Sie versucht, die Einstellung einen Verweis auf die UserInfo-Instanz an die Benutzer. Sowas wie info.setUser(u)?
- Ich habe versucht, nach dem Fehler Teil in meiner Frage =)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen:
Dann sehen, ob das funktioniert. Ich gehe davon aus, dass in
user_info
Tabelle, dieuser_id
Feld istNOT NULL
in Ihrem RDBMS. Auch, da es bidirektional ist, müssen SiesetXXX
aufUserInfo
undUser
.Update: Sind Sie sicher, dass Sie die Angabe einer ID für beide
User
undUserInfo
? Es sieht aus wie die ID ist nicht festgelegt, daher gibt es keinen Verweis auf linkUserInfo
zuUser
.Wenn die ID
AUTO_INCREMENT
, dann fügen Sie den folgenden nach@Id
Anmerkung:user_iduser
. Hat meine Lösung jetzt funktioniert?