Jil*_*ill 2 java spring annotations hibernate
我有以下代码(当然是简化的):
@Entity
public class Foo {
@Generated
private Long id;
@OneToMany(mappedBy=foo)
@Cascade(CascadeType.PERSIST)
private Collection<Bar> bars;
...
}
@Entity
public class Bar {
@Generated
private Long id;
@ManyToOne
@NotNull
private Foo foo;
...
}
Run Code Online (Sandbox Code Playgroud)
从我见过的许多例子来看,这应该有效:
Foo foo = new Foo();
Bar bar = new Bar();
bar.setFoo(foo);
Bar bar2 = new Bar();
bar2.setFoo(foo);
foo.bars.add(bar);
foo.bars.add(bar2);
hibernateTemplate.save(foo);
Run Code Online (Sandbox Code Playgroud)
当我说“这应该有效”时,我的意思是我期望发生的是,当我查看数据库表 Foo 时,我将有一行 Foo (假设 id =1 )和两行 Bar,每行都有foo_id 列中的值 1(foo 的 id)。
现实中发生的事情是我得到一个异常:
org.hibernate.PropertyValueException: not-null property references a null or transient value:
Run Code Online (Sandbox Code Playgroud)
在 Bar.foo 上。如果我删除 @NotNull,保存会成功,但 foo_id 列中的值为 null,而不是值 1。
所以我的问题是:这是 Hibernate 中的一个已知错误,Cascade persist 不起作用,还是我只是不了解如何使用它?
谢谢您的帮助。
这不是一个错误,但记录很少
CascadeType.PERSIST与 一起工作 与hibernateTemplate.persist(foo)
CascadeType.SAVE_UPDATE一起工作hibernateTemplate.save(foo)
在这里查看.persist(foo) 和 .save(foo) 之间的 4 个区别
请确保您正在使用 Hibernate(不是 JPA)注释
org.hibernate.annotations.Cascade
org.hibernate.annotations.CascadeType
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8913 次 |
| 最近记录: |