2013-05-27 52 views
0

我想映射一个包含两个持久对象的类(与数据库无关的对象),有没有办法做到这一点?如果有一个关键字/属性需要使用,那么我可以从这里开始。如果没有直接的方法,请您在高层简要解释替代步骤?包含两个持久对象的对象的映射

class NotPersistent { 
    Private Persistent1 persistent1; 
    Private Persistent2 persistent2; 
    ... 
} 

class Persistent1 { 
    Private Integer id; 
    Private String column1; 
    ... 
} 

class Persistent2 { 
    Private Integer id; 
    Private String column1; 
    ... 
} 
我迄今所做

Hibernate映射

<class name="NotPersistent"> 
    <one-to-one class="Persistent1"></one-to-one> 
    <one-to-one class="Persistent2"></one-to-one> 
    ... 
</class> 

<class name="Persistent1"> 
    <one-to-one class="NotPersistent"></one-to-one> 
    <id ...> 
    <property ...> 
    ... 
</class> 

<class name="Persistent2"> 
    <one-to-one class="NotPersistent"></one-to-one> 
    <id ...> 
    <property ...> 
    ... 
</class> 

如果在正确的轨道上的IM,应该是什么在<class name="NotPersistent" ..

+0

只为了解它。 (没有冒犯的意思)如果在数据库中没有表示NotPersistent类,为什么要将它映射到Hibernate中,唯一的目的是将东西存入数据库?如果你能解释一些潜在的问题,这可能有助于为解决方案提供建议。 – Carsten

+0

我没有对类和底层CRUD操作的控制权,他们称之为'hibernateTemplate.save(NotPersistent.class,obj)',并要求将其映射到现有的数据库表。这是不可能完成的吗? – jchips12

+0

好的,你应该编辑“(与数据库无关的对象)”部分,因为它很混乱。而实际上你正试图将对象保存在数据库中。你只是在寻找正确的映射。剩下的问题是您可以为映射做些什么?你能否映射出需要JoinTable的地方,还有哪些限制? – Carsten

回答

0

好了,没有什么属性否则目前采取的方法看起来是正确的。您使用one-to-one标签映射。

<class name="NotPersistent" table="xxx"> 
    <one-to-one name="persistent1" class="Persistent1" cascade="save-update"></one-to-one> 

<class name="NotPersistent" table="xxx"> 
    <one-to-one name="nonPersistent" class="NonPersistent"></one-to-one> 

由于我没有广泛使用XML映射,我不知道确切的语法。但是这种方法应该让你开始。另一个问题是实体真的是一对一?它看起来不太可能,因为这两个持久实体是如此紧密相关以至于它们可以直接使用一个ForeignKey和一个实体直接耦合。