Hibernate Cascade PERSIST

Won*_*key 7 hibernate jpa cascade persist

我有一个关于Hibernate的一般性问题,我正在与之斗争.

我有A级和B级,其中B依赖于A.

在我的代码中,当我调用em.persist(objOfTypeA)时,我希望插入并插入到表AAA和BBB中.如果我手动预先判断A获取A的ID并将其填入每个对象的列表中然后保留该列表,那么事情就有效了.但是我希望Hibernate 会神奇地发生这种情况.

难道我做错了什么?或者我只是期待太多的Hibernate?

谢谢

@Entity
@Table(name = "AAA")
@Veto
public class A {

    @Id
    @GeneratedValue
    @Column(name = "Id")
    private Long id;


    @NotNull
    @Column(name = "Name")
    private Long name;

    ...

    @OneToMany(mappedBy="a", fetch=FetchType.LAZY, cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
    private List<B> b;
...
}

@Entity
@Table(name = "BBB")
@Veto
public class B {

    @Id
    @GeneratedValue
    @Column(name="Id")
    private Long id;

    @NotNull
    @Column(name="AId")
    private Long aId;

    @NotNull
    @Column(name = "Name")
    private Long name;

    @JoinColumn(name = "AId", referencedColumnName="Id", updatable = false, insertable = false)
    @ManyToOne(optional = false)
    private A a;
...     
}
Run Code Online (Sandbox Code Playgroud)

Won*_*key 3

我终于解决了。我得到的或找到的例子都没有告诉我到底出了什么问题,只有在我自己的实验之后我才得出这个结论:

而不是有

@OneToMany(mappedBy="a", fetch=FetchType.LAZY, cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
private List<B> b;
Run Code Online (Sandbox Code Playgroud)

这不起作用(FK 仍然为 NULL)

这确实有效:

@OneToMany(fetch=FetchType.LAZY, cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
@JoinColumn(name="AId")
@NotNull
private List<B> b;
Run Code Online (Sandbox Code Playgroud)