0

我有以下域对象

Loan {
     int id;
     Date attribute1;
}

LoanExtension {
     Date attribute2;
}

我想像这样保留我的对象,因为有时我只想更改数据库中 LoanExtension 中的属性(即,贷款对象中的属性 1 在对象中将为空,我不希望在数据库中设置它)。

这怎么可能使用带有 xml 的休眠映射?我做了以下

<class name="org.domain.borrowerReview.Loan" table="loan_profiles" >
    <cache usage="read-only"/>
    <id name="loanId" column="id">
        <generator class="native"/>
    </id>
    <version name="attribute1" column="date_1/>
    <subclass name="org.domain.borrowerReview.LoanExtension" extends="org.rangde.domain.borrowerReview.LoanProfilesUpdate">
        <property name="attribute2" column="date_2" />
    </subclass>
</class>

我得到了这个例外:当使用“单表每个层次结构”并且一个类有子类时,需要鉴别器

4

1 回答 1

0

简短的回答

您需要添加一个鉴别器列并将代码段更改为类似的内容。

<class name="org.domain.borrowerReview.Loan" table="loan_profiles" > 
    <cache usage="read-only"/> 
    <id name="loanId" column="id"> 
        <generator class="native"/> 
    </id> 
    <version name="attribute1" column="date_1/> 
    <discriminator column="loan_profiles_type" type="string"/>
    <subclass name="org.domain.borrowerReview.LoanExtension" extends="org.rangde.domain.borrowerReview.LoanProfilesUpdate"> 
        <property name="attribute2" column="date_2" /> 
    </subclass> 
</class> 

长答案

首先,请记住 JPA 中的继承与常规继承并非绝对平行。

必须评估类的设计将如何影响底层模式。

你还没有提到你希望你的表结构如何。

Hibernate 提供了三种继承机制。

  • 每个类层次结构表
  • 每个子类的表
  • 每个具体类的表

在此处查看详细信息

您的 xml 片段表明您正在使用每个类层次结构的表。

现在,如果一个有子类,那么如果它只是一个子类(尽管它是允许的),那将没有什么用处。在“每个类层次结构表”下,所有子类都放在同一个表中。

为了区分特定记录属于哪个子类,hibernate 依赖于鉴别器列。

您需要定义相同的。

请参阅以下文档文档

于 2012-04-20T22:10:25.743 回答