【发布时间】:2017-02-22 18:02:40
【问题描述】:
我有一个 EMF 包含层次结构:一个 House 包含一个 Room 列表,使用 ecore 文件表示。
在坚持之前,当我最初创建我的房子并用房间填充它时,Room 对象的 eContainer 值正确显示包含房子。然后我使用 Hibernate(不涉及 Teneo)来保存房子(级联保存房间)。
当我重新加载 House 对象时,我得到了对所有房间的引用。但是,Room 的 eContainer 值现在为 null。这是相关的,因为我使用 EcoreUtil.delete(bathroom) 从其包含的房屋中删除房间,并且使用 EObject.eContainer()。
相关的Hibernate映射:
<class name="House" table="house" lazy="false">
<bag name="rooms" lazy="true" cascade="save-update, delete">
<key update="true">
<column name="house_id" unique="false"/>
</key>
<one-to-many class="Room"/>
</bag>
</class>
<class name="Room" table="room" lazy="false">
</class>
我应该怎么做才能删除 EMF 对象?我应该调用 EcoreUtil.delete(obj) 以外的东西吗?我应该在加载时手动添加 eContainer 引用吗?我应该更改我的休眠映射吗?
【问题讨论】:
-
不使用Teneo的原因是什么?它是 EMF 和 Hibernate 之间的桥梁……
-
主要原因(也许不是一个好的原因)是我们从一开始就使用 Hibernate,不知道迁移到 Teneo 会有多难。