У меня есть следующие сущности и сопоставление:
@Entity
public class Father {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@OneToMany(mappedBy = "father", cascade = CascadeType.ALL)
private Set<Child> childs = new HashSet<>();
// getters and setters
}
и
@Entity
@IdClass(Child.ChildPk.class)
public class Child {
@Id
@JoinColumn(name = "father_id")
@ManyToOne(optional = false)
private Father father;
@Id
@Column(name = "name")
private String name;
public Child() {
}
// getters and setters
static class ChildPk implements Serializable {
private Father father;
private String name;
// getters and setters
// equals and hashcode on both father and name
}
}
Как видите, мой класс Child
имеет составной ключ для всех своих членов, включая@OneToMany
ссылка на Father
.
Проблема, с которой я сталкиваюсь, заключается в следующем: когда я пытаюсь обновить сущность Father
(session.refresh(father)
), она не обновляется правильно: дочерний элемент перезагружаетсяи Отец внутри Ребёнка тоже, но не корневой Отец.
Я попытался воспроизвести в упрощенном контексте (простой проект Spring Boot с H2 и JPA, и теперь я получаю ошибку StackOverflow из-за бесконечногоцикл загрузки сущностей).
Что-то не так с моим отображением?
Вот проект github, который воспроизводит ошибку: https://github.com/bpagnier/test-jpa
Спасибо!:)