【问题标题】:@OneToOne and @JoinColumn, auto delete null entity , doable?@OneToOne 和 @JoinColumn,自动删除空实体,可行吗?
【发布时间】:2011-03-03 09:16:56
【问题描述】:

我有两个实体,带有以下 JPA 注释:

@Entity
@Table(name = "Owner")
public class Owner implements Serializable
{
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  @Column(name = "id")
  private long id;

  @OneToOne(fetch=FetchType.EAGER , cascade=CascadeType.ALL)
  @JoinColumn(name="Data_id")
  private Data Data;  
}

@Entity
@Table(name = "Data")
public class Data implements Serializable
{
  @Id
  private long id;
}

Owner 和 Data 是一一对应的,拥有方是 Owner。 当我执行时出现问题: owner.setData(null) ; ownerDao.update(owner) ; “Owner”表的 Data_id 变为 null ,没错。

但“数据”行不会自动删除。 我必须编写另一个 DataDao 和另一个服务层来包装这两个操作( ownerDao.update(owner) ; dataDao.delete(data); )

是否可以在拥有所有者设置为空时自动删除数据行?

【问题讨论】:

    标签: hibernate orm jpa one-to-one


    【解决方案1】:

    根据您的休眠版本,使用:

    在 @OneToOne 注释上使用 cascadeType : DELETE_ORPHAN 或 orphanRemoval=true

    文档:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/objectstate.html#objectstate-transitive

    我从未在 OneToOne 上尝试过,但从文档中,它应该可以工作。

    @OneToOne(fetch=FetchType.EAGER , cascade=CascadeType.ALL)
    @JoinColumn(name="Data_id")
    @org.hibernate.annotations.Cascade({org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
    private Data Data;
    

    @OneToOne(fetch=FetchType.EAGER , cascade=CascadeType.ALL, orphanRemoval=true)
    @JoinColumn(name="Data_id")
    private Data Data;
    

    编辑: 我发现了这个帖子:Workarounds for Hibernate's lack of delete-orphan support for one-to-one and many-to-one relationships?

    所以也许它不起作用。然而,这两个答案描述了两种不同的解决方法。

    【讨论】:

    • 谢谢你,它有效!!!而且... CascadeType.DELETE_ORPHAN 已弃用。它被 @OneToOne(fetch=FetchType.EAGER , cascade=CascadeType.ALL , orphanRemoval=true) 取代
    • FetchType.EAGER 似乎对于孤儿删除至关重要。 FetchType.LAZY 孤立删除不起作用。休眠版本 4.3.10.FINAL。
    • 使用 Hibernate 5.0.11.FINAL,这对我来说已经足够了@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)。我使用FetchType.LAZYFetchType.EAGER 都取得了成功。 EAGER 是默认值。
    猜你喜欢
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    相关资源
    最近更新 更多