hibernate 4.1.4中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

是在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)

查看这个示例以进一步阅读。

编辑:

要在映射中指定inverse="true"属性,只需在@ OneToMany注释中指定mappedBy属性,以引用关系的所属部分,如下所示:

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

这里以theOneSide为例,您只需要指定在映射的另一侧类中使用的字段名,例如:

@ManyToOne
private MyClass theOneSide;

查看JPA注释中的inverse=true以获取更多信息。

相关内容

最新更新