Мне кажется, что вы пытаетесь установить двунаправленное отношение.Это возможно путем добавления сопоставления к обеим сторонам отношения.
Например, добавьте сопоставление @ManyToOne
к сущности Child
.Помните, что вам, вероятно, следует удалить свое поле parentId
, поскольку теперь вы можете получить к нему доступ, используя child.getParent().getId()
.
@Entity
public class Child {
@Id
private Integer id;
@ManyToOne
@JoinColumn(name = "parentId")
private Parent parent;
// Remove parentId field
// Getters + Setters ...
}
ПРИМЕЧАНИЕ : если вы хотите сохранитьВ поле parentId
вам нужно выбрать, какие два сопоставления (getParentId()
или getParent().getId()
) вы хотите использовать для вставки и обновления сущностей.Другое поле должно иметь как insertable = false
, так и updatable = false
.
Следующим шагом является изменение сопоставления @OneToMany
для использования mappedBy
:
@Entity
public class Parent {
@Id
private Integer id;
@OneToMany(mappedBy = "parent") // Change this
private List<Child> children;
// Getters + Setters ...
}
Еслиесли вы хотите получить конкретного потомка с его родителем, теперь вы можете создать репозиторий для Child
сущностей:
public interface ChildRepository extends JpaRepository<Child, Integer> {
}
После этого вы можете получить конкретного потомка с помощью:
Optional<Child> child = repository.findById(123); // 123 is the ID of the child in this case
Optional<Parent> parent = child.map(Child::getParent);
При загрузке Spring 1.x это будет:
Child child = repository.findOne(123);
Parent parent = null;
if (child != null) {
parent = child.getParent();
}