java - CascadeType.Persist 没有按预期工作

标签 java hibernate spring annotations

我有以下代码(当然是经过简化的):

 @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;
   ...
 }

从我见过的许多例子来看,这应该可行:

 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);

当我说“这应该可行”时,我的意思是我期望发生的事情是当我看 数据库表 Foo 我将在 Foo 中有一行(假设 id =1 )和 Bar 中的两行,每行在 foo_id 列中的值为 1(foo 的 id)。

实际发生的是我得到一个异常:

org.hibernate.PropertyValueException: not-null property references a null or transient   value:

在 Bar.foo 上。 如果我删除 @NotNull,保存会成功,但我在 foo_id 列中有 null 而不是值 1。

所以我的问题是: 这是 Hibernate 中的一个已知错误,即 Cascade 持久化不起作用,还是我只是不了解如何使用它?

感谢您的帮助。

最佳答案

这不是一个错误,但文档不足

CascadeType.PERSISThibernateTemplate.persist(foo) 配合使用 CascadeType.SAVE_UPDATEhibernateTemplate.save(foo)

配合使用

Look here .persist(foo) 和 .save(foo) 的 4 个区别

确保您使用的是 Hibernate(而非 JPA)注释

org.hibernate.annotations.Cascade
org.hibernate.annotations.CascadeType

关于java - CascadeType.Persist 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6869551/

相关文章:

java - Eclipse RSE 错误 : Operation failed. 文件系统输入或输出错误

java - 当 JSON 解析器找不到 JSON 对象时如何设置条件

mysql - jpql select查询与where子句不区分非英文字符

java - 如何只向一个用户发送 websocket 消息?

java - @IfProfileValue 两个 Spring 轮廓

java - 学习Android开发(有经验)

java - JComboBox 选择更改

java - 异常 : java. lang.IllegalArgumentException : An SPI class of type org. 名称为 'Lucene410' 的 apache.lucene.codecs.Codec 不存在

java - 如何在 Spring Hibernate 5 LocalSessionFactoryBean 中注入(inject) Spring 管理的 CacheRegionFactory

java - 在没有 XML 配置的情况下将 Ehcache CacheManager (v 3.x) 转换为 Spring CacheManager