Как обновить дочернюю сущность в отношении @OnetoMany в Spring Data JPA - PullRequest
0 голосов
/ 12 марта 2020

У меня есть родительский класс:

@Entity(name = "Master")
@Table(name = "master")
public class Master {

    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    private Integer id;

    @Column(name = "name") 
    private String name;


    @OneToMany(mappedBy = "master", cascade = CascadeType.ALL, fetch = FetchType.Lazy)
    List<AdditionalAttribute> additionalAttributes = new ArrayList<>();


    public void addAttributes(AdditionalAttribute attribute) {
        additionalAttributes.add(attribute);
        attribute.setFindings(this);
    }

    public void removeAttributes(AdditionalAttribute attribute) {
        additionalAttributes.remove(attribute);
        attribute.setFindings(null);
    }
}

И дочерний класс:

@Entity(name = "additional_attribute")
public class AdditionalAttribute {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long Id;

    private String attributeName;

    @Column(length = 255)
    private String attributeValue;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "master_id")
    private Master master;

}

Теперь предположим, что я уже вставил данные в обе таблицы, например:

  Master
 ================
 id.      name
 1.       xyz

 AdditionalAttribute
======================================================
 id.     attributeName.   attributeValue.    master_id
 1         Acme               test               1
 2.        loreal             red                1

Теперь, учитывая master_id, как мне обновить attributeValue в таблице AdditionalAttribute для этого идентификатора ??

Я сделал следующее:

  1. Получить список additionalAttributes от главного объекта (тот, который мы получили из сеанса)

  2. Перебрать список и получить каждый AdditionAttribute объект.

  3. Установить новое значение для объекта.

Это хороший способ обновления? Есть ли у нас лучший подход?

...