@MappedSuperclass public abstract class BillingDetails1 { @Column(name = "OWNER", nullable = false) private String owner; }
现在映射具体的子类:
@Entity @AttributeOverride( name="owner", column=@Column( name = "CC_OWNER", nullable = false ) ) public class CreditCard1 extends BillingDetails1 { @Id @GeneratedValue @Column(name = "CREDIT_CARD_ID") private Integer id; @Column(name = "CC_NUMBER", nullable = false) private String number; @Column(name = "EXP_MONTH", nullable = false) private String expMonth; @Column(name = "EXP_YEAR", nullable = false) private String expYear; }可以用@AttributeOverride注解在一个子类中覆盖来自超类的列映射。在CREDIT_CARD表中重新命名OWNER列为CC_OWNER。数据库标识符也可以在超类中声明,给所有的子类使用一个共用的列名和生成器策略。
<mapped-superclass class="cn.jbit.hibernate.entity1.BillingDetails1" access="FIELD"> <attributes> <basic name="owner"> <column name="OWNER" nullable="false"/> </basic> </attributes> </mapped-superclass> <entity class="cn.jbit.hibernate.entity1.CreditCard1" access="FIELD"> <attribute-override name="owner"> <column name="CC_OWNER" nullable="false"/> </attribute-override> <attributes> <id name="id"> <column name="CREDIT_CARD_ID" nullable="false"/> <generated-value strategy="AUTO"/> </id> <basic name="number"> <column name="CC_NUMBER" nullable="false"/> </basic> <basic name="expMonth"> <column name="EXP_MONTH" nullable="false"/> </basic> <basic name="expYear"> <column name="EXP_YEAR" nullable="false"/> </basic> </attributes> </entity>说明:(组件是值类型)可以把子类映射为组件,通过所超类(或者接口)的所有属性都包括在组件映射中。有了注解,可以在正映射的可嵌入组件的超类上使用@MappedSuperclass注解,就像对实体使用时一样。注意该特性仅在Hibernate Annotations中可用,不是标准的或者可移植的。
Hibernate实战_笔记27(每个带有隐式多态的具体类一张表),布布扣,bubuko.com
Hibernate实战_笔记27(每个带有隐式多态的具体类一张表)
原文:http://blog.csdn.net/com185272358/article/details/22331385