首页 > 解决方案 > 如何在 Spring Data JPA 中更新 @OnetoMany 关系中的子实体

问题描述

我有一个父类:

@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,我如何更新表attributeValueAdditionalAttribute的 id ?

我所做的是:

  1. 从主实体获取列表additionalAttributes(我们从会话中获取的)

  2. 遍历列表并获取每个AdditionAttribute对象。

  3. 为对象设置新值。

是不是更新的好方法?我们有更好的方法吗?

标签: hibernatejpaspring-data-jpa

解决方案


推荐阅读