【问题标题】:JPA Mapping OneToMany with partial embedded id childJPA 映射 OneToMany 与部分嵌入的 id 孩子
【发布时间】:2021-12-01 09:17:17
【问题描述】:

简单的例子(希望如此)。我在一个表中有一个主键(使用序列),该值是子表的部分 FK。我看到 Parent 正在尝试使用生成的序列进行保存,但随后我看到一个异常,即在保存孩子时嵌入的 parentId 为 null。用于父级的序列值不会传递给子级。我尝试了许多注释和 mappedBy/join 列名,但没有运气。

任何指针将不胜感激。

public class Parent {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "audit_seq")
    @SequenceGenerator(name = "audit_seq", allocationSize = 5)
    private Long id;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "parent")
    private List<Child> childList = new ArrayList<>();

   //Used to add child record o the parent
    public void addChild(Child child) {
        this.childList .add(child);
        child.setParent(this);
    }
}

@Embeddable
public class ChildId {
   private Long parentId;
   private String name;
}

public class Child {
    @EmbeddedId
    private ChildId id;

    private String myCol;

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name = "parentId", insertable = false, updatable = false)
    private Parent parent;

}

【问题讨论】:

    标签: spring-data-jpa mapping


    【解决方案1】:

    我能够通过使用几个注释来解决这个问题:

    父类:

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "parent",  orphanRemoval = true)
    @PrimaryKeyJoinColumn
    private List<Child> childList = new ArrayList<>();
    

    儿童班:

    @ManyToOne
    @MapsId("id")
    @JoinColumn(name = "id")
    private Parent parent;
    

    现在,当使用适当的序列 ID 保存父对象时,所有对象都会被持久化。

    【讨论】:

      猜你喜欢
      • 2017-09-07
      • 2014-11-19
      • 1970-01-01
      • 2011-06-22
      • 1970-01-01
      • 2019-02-24
      • 1970-01-01
      • 2011-01-01
      相关资源
      最近更新 更多