我是这个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。
答案 0 :(得分:6)
Hibernate 4.1.4
版本delete-orphan
中的<是>已弃用,现在位于Hibernate
和JPA 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 以获取更多信息。