Hibernate Beaucoup à une mise à jour de clé étrangère à null
J'essaie d'obtenir mon @OneToMany et @ManyToOne des relations correctes.
Classe 1:
@Entity
public class IdeaProfile {
@Id
@GeneratedValue
private int ideaProfileId;
private String name;
Date dateConcieved;
@OneToOne
@JoinColumn(name="statusCode")
private Status status;
@OneToMany(fetch=FetchType.EAGER, targetEntity=Pitch.class, cascade=CascadeType.ALL)
@JoinColumn(name = "ideaProfileId")
private List<Pitch> pitchs;
....getters and setters....
Class2:
@Entity
public class Pitch {
@Id
@GeneratedValue
private int id;
@ManyToOne
@JoinColumn(name = "ideaProfileId")
private IdeaProfile ideaProfile;
private Date date;
private String notes;
....getters and setters....
Cette relation semble bien fonctionner quand je suis charger ou enregistrer un nouveau record:
Hibernate: insert into IdeaProfile (dateConcieved, genreCode, name, statusCode) values (?, ?, ?, ?)
Hibernate: insert into Pitch (date, ideaProfileId, notes) values (?, ?, ?)
Hibernate: update Pitch set ideaProfileId=? where id=?
Cependant, lorsque j'essaie de mettre à jour cette fiche, il essaie de définir les IdeaProfileId à null:
Hibernate: update IdeaProfile set dateConcieved=?, genreCode=?, name=?, statusCode=?, where ideaProfileId=?
Hibernate: update Pitch set date=?, ideaProfileId=?, notes=? where id=?
Hibernate: update Pitch set ideaProfileId=null where ideaProfileId=?
Quand je debug, je peux voir que IdeaProfileId est en effet mis sur la Hauteur de l'Objet...
Pour info, je ne suis pas directement la mise à jour de l'original des objets que j'ai chargé à partir de la DB. Ces domaines ont mappé à un Modèle de classe qui est ce que les mises à jour de l'INTERFACE utilisateur. Donc sur enregistrer/mettre à jour j'ai mapper les valeurs de retour pour de nouveaux objets de domaine, y compris l'Id comme suit:
IdeaProfile domain = new IdeaProfile();
domain.setId(model.getIdeaProfileId());
domain.setName(model.getName());
domain.setStatus(model.getStatus());
domain.setDateConcieved(Date.valueOf(model.getDateConvieved()));
for (PitchModel pitch : model.getPitches()) {
Pitch pitchDomain = new Pitch();
pitchDomain.setId(pitch.getId());
pitchDomain.setDate(Date.valueOf(pitch.getDate()));
pitchDomain.setNotes(pitch.getNotes());
pitchDomain.setIdeaProfile(domain);
if(domain.getPitchs() == null ) {
domain.setPitchs(new ArrayList<Pitch>());
}
domain.getPitchs().add(pitchDomain);
}
openSession();
session.beginTransaction();
session.saveOrUpdate(domain);
session.getTransaction().commit();
closeSession();
Personne ne sait ce que j'ai fait de mal, donc, Hibernate provoque la mise à jour pour essayer de mettre en IdeaProfileId à null?
Beaucoup apprécié.
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas une association bidirectionnelle ici. Vous avez deux associations indépendantes, chacune mal mappé à la même colonne.
Dans une association bidirectionnelle, vous devez toujours avoir un propriétaire de côté, et un inverse de côté. L'inverse de la côté est marqué à l'aide de l'attribut mappedBy. Dans un OneToMany association, l'inverse doit être le côté:
...