我不熟悉这个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
被弃用,现在在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)
查看这个示例以进一步阅读。
编辑:要在映射中指定inverse="true"
属性,只需在@ OneToMany
注释中指定mappedBy
属性,以引用关系的所属部分,如下所示:
@OneToMany(fetch = FetchType.LAZY, targetEntity=com.TextPO.class, orphanRemoval = true, mappedBy= "theOneSide")
这里以theOneSide
为例,您只需要指定在映射的另一侧类中使用的字段名,例如:
@ManyToOne
private MyClass theOneSide;
查看JPA注释中的inverse=true以获取更多信息。