Entfernen der Kinder von der @OneToMany-Verein: CascadeType.ALLE + orphanRemoval = true nicht funktioniert
Ich habe eine harte Zeit entfernen childs aus einer OneToMany-Verein. Mein Unternehmen:
@Entity
@Table(name = "PERSON")
public class PersonEntity extends BaseVersionEntity<Long> implements Comparable<PersonEntity>
{
...
//bi-directional many-to-one association to Project
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "person", orphanRemoval = true)
private final Set<ProjectEntity> projects = new HashSet<ProjectEntity>();
...
@Entity
@Table(name = "PROJECT")
public class ProjectEntity extends BaseVersionEntity<ProjectPK>
{
@EmbeddedId
private ProjectPK id;
...
//bi-directional many-to-one association to UdbPerson
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PERSON_ID", nullable = false, insertable = false, updatable = false)
private PersonEntity person;
...
@Embeddable
public class ProjectPK implements Serializable
{
//default serial version id, required for serializable classes.
private static final long serialVersionUID = 1L;
@NotNull
@Column(name = "PERSON_ID")
private Long personId;
...
Meinem erfolglosen Versuch zum löschen die childs:
personEntity.getProjects().clear();
Dies funktioniert, aber ich glaube nicht, das ist der richtige Ansatz:
for (Iterator<ProjectEntity> iterator = personEntity.getProjects().iterator(); iterator.hasNext();)
{
ProjectEntity projectEntity = iterator.next();
projectDao.deleteEntity(projectEntity);
iterator.remove();
}
Was mache ich hier falsch?
Dank
Jonny
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Assoziation ist bidirektional, und die Besitz-Seite einer bidirektionalen Assoziation ist die eine, wo es kein mappedBy-Attribut. Dies bedeutet, dass in diesem Fall der Besitzer der Seite ist die Projekt-Seite.
Hibernate betrachtet nur die besitzende Seite zu wissen, wenn der Verein existiert oder nicht. Dies bedeutet, dass zu brechen, die die Assoziation zwischen einer person und einem Projekt, müssen Sie die person zu
null
im Projekt.for (Iterator<ProjectEntity> iterator = personEntity.getProjects().iterator(); iterator.hasNext();) { ProjectEntity projectEntity = iterator.next(); projectEntity.setPerson(null); iterator.remove(); }
contact.setAccount(null);
.null
auf diePerson
imProject
aber immer noch, ich bin nicht in der Lage zu entfernen. Ich bin auch mitmappedBy
imPerson
Seite.Session#saveOrUpdate
hibernate-spezifische, In der DB habe ich 3 Kinder, und aus der Sicht habe ich 2 Kinder aktualisiert werden und sich entfernen wollen, 3. oder Letzte, der Umgang mit dieser situation? Sollte ichSession#get()
oderSession#load()
zu wissen, welches element zu entfernen, vor dem update?