hibernate继承的三种映射策略( Inheritance mapping)
来源:互联网 发布:q币卡充值中心软件 编辑:程序博客网 时间:2024/04/27 06:35
继承的三种映射策略
每个类级别一个表(父类和子类公用一张表)
<class name="Payment" table="PAYMENT"> <id name="id" type="long" column="PAYMENT_ID"> <generator class="native"/> </id> <discriminator column="PAYMENT_TYPE" type="string"/> <property name="amount" column="AMOUNT"/> ... <subclass name="CreditCardPayment" discriminator-value="CREDIT"> <property name="creditCardType" column="CCTYPE"/> ... </subclass> <subclass name="CashPayment" discriminator-value="CASH"> ... </subclass> <subclass name="ChequePayment" discriminator-value="CHEQUE"> ... </subclass></class>
discriminator 指定识别者列
discriminator-value 识别者列的值
约束:子类属性不能运用非空约束
支持各种多态映射策略
父类和每个子类一张表
<class name="Payment" table="PAYMENT"> <id name="id" type="long" column="PAYMENT_ID"> <generator class="native"/> </id> <property name="amount" column="AMOUNT"/> ... <joined-subclass name="CreditCardPayment" table="CREDIT_PAYMENT"> <key column="PAYMENT_ID"/> <property name="creditCardType" column="CCTYPE"/> ... </joined-subclass> <joined-subclass name="CashPayment" table="CASH_PAYMENT"> <key column="PAYMENT_ID"/> ... </joined-subclass> <joined-subclass name="ChequePayment" table="CHEQUE_PAYMENT"> <key column="PAYMENT_ID"/> ... </joined-subclass></class>
子类表例如CHEQUE_PAYMENT中<key column="PAYMENT_ID"/>指定了PAYMENT_ID当前列关联父表,
并且当前列为为主键主键列
<class name="Payment" table="PAYMENT"> <id name="id" type="long" column="PAYMENT_ID"> <generator class="native"/> </id> <discriminator column="PAYMENT_TYPE" type="string"/> <property name="amount" column="AMOUNT"/> ... <subclass name="CreditCardPayment" discriminator-value="CREDIT"> <join table="CREDIT_PAYMENT"> <key column="PAYMENT_ID"/> <property name="creditCardType" column="CCTYPE"/> ... </join> </subclass> <subclass name="CashPayment" discriminator-value="CASH"> <join table="CASH_PAYMENT"> <key column="PAYMENT_ID"/> ... </join> </subclass> <subclass name="ChequePayment" discriminator-value="CHEQUE"> <join table="CHEQUE_PAYMENT" fetch="select"> <key column="PAYMENT_ID"/> ... </join> </subclass></class>
join和subclass的联合用法,这种用法可以和上面的joined-subclass联合一起使用,
子类一张表
<class name="Payment"> <id name="id" type="long" column="PAYMENT_ID"> <generator class="sequence"/> </id> <property name="amount" column="AMOUNT"/> ... <union-subclass name="CreditCardPayment" table="CREDIT_PAYMENT"> <property name="creditCardType" column="CCTYPE"/> ... </union-subclass> <union-subclass name="CashPayment" table="CASH_PAYMENT"> ... </union-subclass> <union-subclass name="ChequePayment" table="CHEQUE_PAYMENT"> ... </union-subclass></class>
原文有 The identity generator strategy is not allowed in union subclass inheritance.
The primary key seed has to be shared across all unioned subclasses of a hierarchy
意思是子类共享父类生成的id,子类自己不能够定义id生成器
隐式多态关联
<class name="CreditCardPayment" table="CREDIT_PAYMENT"> <id name="id" type="long" column="CREDIT_PAYMENT_ID"> <generator class="native"/> </id> <property name="amount" column="CREDIT_AMOUNT"/> ...</class><class name="CashPayment" table="CASH_PAYMENT"> <id name="id" type="long" column="CASH_PAYMENT_ID"> <generator class="native"/> </id> <property name="amount" column="CASH_AMOUNT"/> ...</class><class name="ChequePayment" table="CHEQUE_PAYMENT"> <id name="id" type="long" column="CHEQUE_PAYMENT_ID"> <generator class="native"/> </id> <property name="amount" column="CHEQUE_AMOUNT"/> ...</class>
使用隐式多态的策略,子类中声明父类的字段amount,
这种策略不支持many-to-one的映射策略
使用any标签建立多态映射策略
继承映射策略和多态支持
0 0
- hibernate继承的三种映射策略( Inheritance mapping)
- NHibernate Inheritance Mapping 继承映射
- NHibernate Inheritance Mapping 继承映射
- Hibernate继承映射(@Inheritance)
- Hibernate继承映射三种策略学习
- Hibernate支持三种基本的继承映射策略:
- Hibernate继承映射的两种策略
- Hibernate的3种继承映射策略
- Hibernate继承映射的三种方式
- Hibernate的三种继承映射
- hibernate参考手册之---继承映射(Inheritance Mappings)
- Hibernate继承映射策略
- HIbernate继承映射策略
- Hibernate Inheritance Mapping
- 解读Hibernate继承映射策略
- 解读Hibernate继承映射策略
- 继承映射(Inheritance Mappings)
- Hibernate三种继承映射方式的比较
- CentOS6.8源码安装git
- Android非常强大的第三方数据库LitePal
- Android 百分比布局(percent-support-lib)的使用及源码详解
- lucene、lucene.NET详细使用与优化详解
- mybatis入门案例
- hibernate继承的三种映射策略( Inheritance mapping)
- wex5 教程 之 图文讲解 拾色器的妙用
- 关于mysql自动掉链的问题(本地或部署到云上)
- Android6.0之后要修改设置中的系统开关的方法
- 安卓权限理解(二)
- 全志a20 修改序列号
- spark在idea下的开发调试
- spring中Aop详细解析
- Deploying R, RStudio and Shiny applications on Unbuntu Server