gpt4 book ai didi

Hibernate Cascade PERSIST

转载 作者:行者123 更新时间:2023-12-04 12:35:41 33 4
gpt4 key购买 nike

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

我有 A 类和 B 类,其中 B 依赖于 A

在我的代码中,当我调用 em.persist(objOfTypeA) 时,我希望插入会插入到表 AAA 和 BBB 中。如果我手动保留 A get 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;
...
}

最佳答案

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

而不是拥有

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

没有用(FK 仍然是 NULL)

这确实有效:
@OneToMany(fetch=FetchType.LAZY, cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE})
@JoinColumn(name="AId")
@NotNull
private List<B> b;

关于Hibernate Cascade PERSIST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9443540/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com