我很难从OneToMany协会中删除孩子。我的实体:
@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; ...
我删除孩子的尝试失败:
personEntity.getProjects().clear();
这可行,但是我认为那不是正确的方法:
for (Iterator<ProjectEntity> iterator = personEntity.getProjects().iterator(); iterator.hasNext();) { ProjectEntity projectEntity = iterator.next(); projectDao.deleteEntity(projectEntity); iterator.remove(); }
我在这里做错了什么?
由于 强尼
关联是双向的,并且双向关联的拥有方是没有mappedBy属性的一方。这意味着在这种情况下,拥有方是项目方。
Hibernate仅考虑拥有方知道关联是否存在。这意味着要破坏人员与项目之间的关联,必须将人员设置null为项目中的。
null