Je suis nouveau en hibernation. Donc, je ne sais pas comment faire:Hibernate: supprime les enregistrements de la table d'association avec des clés étrangères
J'ai 3 tables:
Tableau Personne:
@Entity
@Table(name = "ASD_PERSON")
public class AsdPerson implements Serializable {
@Id
@SequenceGenerator(name="seq_name", sequenceName="gen_id_value", allocationSize = 1)
@GeneratedValue(generator="seq_name")
@Column(name="F_PERSON_ID", nullable = false)
private Long fPersonId;
@OneToMany(mappedBy = "AsdPerson",
cascade = CascadeType.ALL,
orphanRemoval = true)
private List<AsdPersonEvent> asdPersonEventList;
... setters and getters ...
}
Table événement:
@Entity
@Table(name = "ASD_EVENT")
public class AsdEvent implements Serializable {
@Id
@SequenceGenerator(name="seq_name", sequenceName="gen_id_value", allocationSize = 1)
@GeneratedValue(generator="seq_name")
@Column(name="F_EVENT_ID", nullable = false)
private Long fEventId;
@OneToMany(mappedBy = "AsdEvent",
cascade = CascadeType.ALL,
orphanRemoval = true)
private List<AsdPersonEvent> asdPersonEventList;
... setters and getters ...
}
Tableau Personne-événement:
@Entity
@Table(name = "ASD_PERSON_EVENT")
@IdClass(AsdPersonEventPK.class)
public class AsdPersonEvent implements Serializable {
@Id
@GenericGenerator(name = "generator", strategy = "foreign",
parameters = @Parameter(name = "property", value = "asdPerson"))
@GeneratedValue(generator = "generator")
@Column(name="F_PERSON_ID", nullable = false, insertable = false,
updatable = false)
private Long fPersonId;
@Id
@GenericGenerator(name = "generator", strategy = "foreign",
parameters = @Parameter(name = "property", value = "asdEvent"))
@GeneratedValue(generator = "generator")
@Column(name="F_EVENT_ID", nullable = false, insertable = false,
updatable = false)
private Long fEventId;
@ManyToOne
@JoinColumn(name = "F_PERSON_ID", insertable = false,
updatable = false)
private AsdPerson asdPerson;
@ManyToOne
@JoinColumn(name = "F_EVENT_ID", insertable = false,
updatable = false)
private AsdEvent asdEvent;
... setters and getters ...
}
Tout fonctionne parfaitement (ajout de nouveaux enregistrements, la création de nouveaux objets), sauf le cas, lorsque je tente de supprimer les enregistrements associés de la table d'événements ou d'une table de personne:
...
AsdEvent ev = getService().get(115); // get record from Event table by id = 115 (for example)
ev.getAsdPersonEventList().remove(1); // delete some existing records
getService().merge(ev);
...
Après que j'obtiens l'erreur:
deleted object would be re-saved by cascade (remove deleted object from associations): [database.AsdPersonEvent#[email protected]]
Comment configurer Hibernate avec des annotations ou un autre moyen de se débarrasser de cette erreur?
essayez à la place @Cascade ({CascadeType.SAVE_UPDATE, CascadeType.DELETE_ORPHAN}) et montrez comment vous supprimez AsdPersonEvent de la liste. – blow
J'ai montré comment je supprime AsdPersonEvent de la liste. – brazh
@blow: Non, cela ne fonctionne pas. Je ne comprends pas, ce que vous voulez dire quand vous dites: "montrez comment vous supprimez AsdPersonEvent de la liste". – brazh