栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何将继承策略与JPA批注和Hibernate混合使用?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何将继承策略与JPA批注和Hibernate混合使用?

根据Hibernate参考文档,使用Hibernate的XML元数据(…)时应该可以混合使用不同的继承映射策略。

实际上,它并没有得到 真正的 支持,他们使用辅助表“欺骗”了文档示例中的单表策略。 用Hibernate 引用 Java持久性

您可以通过映射整个嵌套继承层次

<union-subclass>
<sub- class>
以及
<joined-subclass>
映射元素。您不能将它们混合使用-例如,要从带有区分符的每类表层次结构切换到规范化的每子类表策略。
一旦决定了继承策略,就必须坚持下去

但是,这并非完全正确。使用一些Hibernate技巧,您可以切换特定子类的映射策略。例如,
您可以将类层次结构映射到单个表,但是对于特定的子类,请使用外键映射策略切换到单独的表
,就像每个子类的表一样。使用

<join>
mapping元素可以实现:

<hibernate-mapping>  <class name="BillingDetails"      table="BILLING_DETAILS">    <id>...</id>    <discriminator        column="BILLING_DETAILS_TYPE"        type="string"/>    ...    <subclass        name="CreditCard"        discriminator-value="CC">      <join table="CREDIT_CARD">        <key column="CREDIT_CARD_ID"/>        <property name="number" column="CC_NUMBER"/>        <property name="expMonth" column="CC_EXP_MONTH"/>        <property name="expYear" column="CC_EXP_YEAR"/>        ...      </join>    </subclass>    <subclass        name="BankAccount"        discriminator-value="BA">      <property name=account" column="BA_ACCOUNT"/>      ...    </subclass>  ...  </class></hibernate-mapping>

您可以通过注释实现相同的目的:

Java
Persistence还支持带有注释的混合继承映射策略。像以前一样,

BillingDetails
用映射超类
InheritanceType.SINGLE_TABLE
。现在,将要从单个表中分解出来的子类映射到辅助表。

@Entity@DiscriminatorValue("CC")@SecondaryTable(    name = "CREDIT_CARD",    pkJoinColumns = @PrimaryKeyJoinColumn(name = "CREDIT_CARD_ID"))public class CreditCard extends BillingDetails {    @Column(table = "CREDIT_CARD",        name = "CC_NUMBER",        nullable = false)    private String number;    ...}

我没有对此进行测试,但是您可以尝试:

  • 使用SINGLE_TABLE策略的地图A
  • 使用
    @SecondaryTable
    注解映射BB,CC等。

我尚未对此进行测试,不知道它是否适合BB1,BB2。

参考

  • Java持久性与Hibernate
    • 5.1.5混合继承策略(p207-p210)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/412894.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号