gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:56:38 24 4
gpt4 key购买 nike

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

 @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/

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