hibernate 4.1.4中all-delete-orphan的注释

时间:2015-07-31 06:50:27

标签: hibernate annotations hibernate-mapping hibernate-annotations all-delete-orphan

我是这个hibernate注释的新手。我想将此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? 我正在使用hibernate 4.1.4。

1 个答案:

答案 0 :(得分:6)

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"属性,您只需在@ mappedBy注释中指定OneToMany属性即可引用关系的拥有部分,如下所示:

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

这里使用theOneSide作为示例,您只需指定映射的另一个侧面中使用的字段名称,例如:

@ManyToOne
private MyClass theOneSide;

请查看 inverse=true in JPA annotations 以获取更多信息。