как выбрать ребенка в отношении один ко многим в jpa - PullRequest
0 голосов
/ 04 июня 2018

Я хочу выбрать родителя с ребенком, которого я хочу.

Но когда я выбираю своего родителя, мне нужно показать всех детей

Как я могу это сделать?

Пример:

public class parent{
    private Integer id;
    @OnetoMany
    @JoinColumn(name="parentId")
    private List<child> children;
}

public class child{
    private Integer id;
    private Integer parentId;
}

findByIdAndchildType(Integer id, String type)

Я хочу видеть: parent (id) -> child (тип)

Но я могу видеть parent (id) -> child (othertype), child (othertype1), дочерний (тип)

1 Ответ

0 голосов
/ 04 июня 2018

Мне кажется, что вы пытаетесь установить двунаправленное отношение.Это возможно путем добавления сопоставления к обеим сторонам отношения.

Например, добавьте сопоставление @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();
}
...