JPA Parent Child работает. Вставить ребенка в одиночку - PullRequest
0 голосов
/ 28 января 2020

Я новичок в JPA. У меня есть родитель и несколько детей. Я могу успешно сохранить родительский и связанный дочерний элемент с сопоставлением столбцов, используя приведенный ниже код.

@Data
@Entity
@Table(name = "Parent")
public class Parent{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ParentKey", nullable = false, length = 20)
    private Long parentKey;

    @Column(name = "ParentID", nullable = true, length = 60)
    private String parentID;

    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "ParentKey", nullable = false)
    private Set<Child> childSet = new HashSet<>(0);
}

@Data
@Entity
@Table(name = "Child")
public class Child {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long childKey;
    private String ChildID;
}

У меня есть сценарий, в котором я получаю только дочерние записи с родительским идентификатором . Я ищу родительский и хочу использовать тот же дочерний объект и хранилище для сохранения дополнительных дочерних записей. Поскольку нет ссылки на родительский ключ, как можно добиться без дублирования дочернего объекта.

Дочерний объект не имеет ParentKey. Я не хочу вносить какие-либо изменения в Parent, когда загружаю только дочерние записи.

Я использую mySQL.

Спасибо

1 Ответ

1 голос
/ 28 января 2020

Во-первых, вам нужен способ запроса к БД, который даст вам Parent сущность по parentID. Если вы используете jpa-модуль данных пружин, вы можете добавить следующий метод к ParentRepository

Optional<Parent> findByParentID(String parentID);

Предполагая, что ваш метод обслуживания выглядит следующим образом, вы сначала извлекаете Parent из БД, используя parentID и тогда вы можете добавить детей к этому родителю.

public void saveChildren(String parentID, Set<Child> children) {
        Parent parent = parentRepository.findByParentID(parentID)
            .orElseThrow(() -> <Your excp that says parent not found by parentID>);

      // assuming you have filtered out duplicates, now you can save remaining as
      parent.getChildSet().addAll(children);
      parentRepository.save(parent);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...