【问题标题】:Hibernate cascades : Object references an unsaved transient instance - save the transient instance before flushing休眠级联:对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例
【发布时间】:2012-02-20 10:11:38
【问题描述】:
@Entity
@Table(name = "parent")
public final class Parent extends Base {

@OneToOne(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
private Person person;

并做(除其他外)这个:

Parent parent = new Parent();
Person person = new Person();
parent.setPerson(person);
session.save(parent);

我得到了提到的异常?

我之前需要手动调用 session.save(person) 吗?我是否必须在子类定义中添加级联类型注释(它引用父类的地方)?

还是我错过了其他明显的东西?

我不想使用 CascadeType.ALL,因为当父母被删除时我想保留人(孩子)。

两个实体/表都扩展了一个公共基表:

@MappedSuperclass()
public abstract class Base {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;

    public Integer getId() {
    return id;
    }

请问这个效果需要哪种级联类型?

【问题讨论】:

  • 两个实体的 ID 生成一切正常吗?
  • 在保存之前没有,但是孩子(人)没有被保存,只是尝试了 ALL 而不是 persist 并且有效......所以我认为它可能是需要 ALL 的 onetoone 映射,而不是坚持下去。但我很可能是错的......
  • @NimChimpsky - 你需要 CascadeType.MERGE(除了你已经拥有的 CascadeType.PERSIST)。狼吞虎咽!比 TC1 领先一分钟。

标签: java hibernate orm


【解决方案1】:

你没有提到 Hibernate 版本,但自从我开始使用它以来,这一直没有改变。

正如您在 Hibernate reference 中所读到的,要获得 Java 标准 SAVE_UPDATE,您需要在 Hibernate 中使用 {CascadeType.PERSIST, CascadeType.MERGE}

编辑:看到更新的信息,您现在正在执行的操作会导致 Hibernate 将其视为双向一对一映射。这基本上意味着对于这两个表中的任何一个中的每个对象,必须有另一个表中具有相同 ID 的对应对象。因此,您不能只删除其中一个,否则会失去 FK 完整性。

如果您希望它是单向映射,例如,如果您希望能够删除人员但离开父级 - 您必须指定 FK,通常通过 @JoinColumn,例如 @JoinColumn(name="PERSON_ID", unique=false, nullable=true, insertable=true, updatable=true)

【讨论】:

  • 它必须是 hibernate 或 jpa,所有都为我工作,但合并和坚持在一起不是。我正在使用休眠4顺便说一句。 OneToOne 映射会导致问题吗?
  • @NimChimpsky ID 是如何生成的? Person 类的另一端是什么?
  • 它们是自动生成的,在成功保存之前都没有 id。 CascadeType.ALL 工作正常......但我不希望这样,即使删除父级,我也希望孩子留下。
  • @NimChimpsky 这很重要,因为如果 Hibernate 将其视为共享 PK,您只能拥有 ALL。如果您希望它是单向的,您可能需要在人员映射上明确声明 @JoinColumn。没有看到 ID 是如何创建的(我知道它是生成的,那部分很明显——它是如何注释的?)我真的不能告诉你更多......
  • 我实际上希望能够删除父级并保留子级...?
猜你喜欢
  • 2020-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
  • 2015-09-27
  • 2021-03-03
  • 2013-11-30
相关资源
最近更新 更多