hibernate 4.1.4 中 all-delete-orphan 的注解

Annotation for all-delete-orphan in hibernate 4.1.4

我是这个休眠注解的新手。我想将此 xml 映射转换为注释:

<map name="Text" table="JAV_TEXT" inverse="true" cascade="all-delete-orphan">
    <key column="FK_GUID"/>
    <map-key column="TEXT_GUID" type="string"/>
    <one-to-many class="com.TextPO"/>
</map>

这是我所做的:

@OneToMany(fetch = FetchType.LAZY, targetEntity=com.TextPO.class)
@Cascade({CascadeType.DELETE_ORPHAN})
@JoinColumn(name="FK_GUID")
@MapKey(name="TEXT_GUID")
private Map<String, PersistentObject> text = new HashMap<String, PersistentObject>();

但是 CascadeType.DELETE_ORPHAN 已被弃用,那么如何通过注释表示 all-delete-orphan 呢? 我正在使用休眠 4.1.4.

是的,在 Hibernate 4.1.4 版本中 delete-orphan 已弃用,现在在 HibernateJPA 2.0 中,您可以使用 orphanRemoval 代替:

@OneToMany(orphanRemoval = true)

你的映射应该是这样的:

@OneToMany(fetch = FetchType.LAZY, targetEntity=com.TextPO.class, orphanRemoval = true)
@JoinColumn(name="FK_GUID")
@MapKey(name="TEXT_GUID")
private Map<String, PersistentObject> text = new HashMap<String, PersistentObject>();

同时删除 @Cascade 注释,您可以将其用作 @OneToMany 注释的属性,如下所示:

@OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, targetEntity=com.TextPO.class, orphanRemoval = true)

查看 this Example 进一步阅读。

编辑:

要在你的映射中给出 inverse="true" 属性 你只需要在你的 @OneToMany 注释中指定 mappedBy 属性来引用关系的拥有部分,像这样:

@OneToMany(fetch = FetchType.LAZY, targetEntity=com.TextPO.class, orphanRemoval = true, mappedBy= "theOneSide")

这里以theOneSide为例,您只需指定映射另一端class使用的字段名即可,例如:

@ManyToOne
private MyClass theOneSide;

查看 inverse=true in JPA annotations 了解更多信息。