<hibernate-mapping package="cn.jbit.hibernate.entity5"> <class name="BillingDetails8" table="BILLING_DETAILS8"> <id name="id" column="BILLING_DETAILS_ID" type="integer"> <generator class="native"/> </id> <discriminator column="BILLING_DETAILS_TYPE" type="string" /> <property name="owner"> <column name="OWNER" not-null="true"/> </property> <subclass name="CreditCard8" discriminator-value="CC"> <join table="CREDIT_CARD8"> <key column="CREDIT_CARD_ID" /> <property name="number" column="CC_NUMBER" type="string" length="20" not-null="false"/> <property name="expMonth" column="EXP_MONTH" type="string" length="20" not-null="false"/> <property name="expYear" column="EXP_YEAR" type="string" length="20" not-null="false"/> </join> </subclass> <subclass name="BankAccount8" discriminator-value="BA"> <property name="account" column="BA_ACCOUNT" type="string" length="20" not-null="false"/> <property name="bankname" column="BANK_NAME" type="string" length="20" not-null="false"/> <property name="swift" column="SWIFT" type="string" length="20" not-null="false"/> </subclass> </class> </hibernate-mapping><join>元素集合了一些属性,并告诉Hibernate到一个二级表中获取它们。
@Entity @DiscriminatorValue("CC") @SecondaryTable( name="CREDIT_CARD9", pkJoinColumns=@PrimaryKeyJoinColumn(name="CREDIT_CARD_ID") ) public class CreditCard9 extends BillingDetails9 { //映射二级表属性 @Column(table="CREDIT_CARD9",name = "CC_NUMBER", nullable = false) private String number; @Column(table="CREDIT_CARD9",name = "EXP_MONTH", nullable = false) private String expMonth; @Column(table="CREDIT_CARD9",name = "EXP_YEAR", nullable = false) private String expYear; }注意:你要用二级表的名称映射被移到二级表里面的所有属性。
@Lob @Column(name = "ITEM_DESCRIPTION") private String description; @Lob @Column(name = "ITEM_IMAGE") private byte[] image;最后,注意Hibernate和JPA都对Serializable(可序列化)的任何属性类型提供序列回滚。这种映射类型把属性的值转换为随后保存在VARBINARY(或者相当的)列中的字节流。当属性的所有者被加载时,属性值是反序列化的。自然地,使用这种策略要非常谨慎(数据存在得比应用程序更长久),并且它可能只对临时数据(用户偏爱、登录会话数据等)有用。
@Temporal(TemporalType.TIMESTAMP) @Column(nullable = false,updatable = false) private Date startDate;与之相当的JPA XML描述符如下:
<entity class="auction.model.Item" access="FIELD"> <attributes> ... <basic name="startDate"> <column nullable="false" updatable="false" /> <temporal>TIMESTAMP</temporal> </basic> </attributes> </entity>对于每个内建的映射类型,都由类org.hibernate.Hibernate定义常量。例如,Hibernate.STRING表示string映射类型。这些常量对于查询参数绑定很有用:
session.createQuery("from Item i where i.description like :desc") .setParameter("desc",d,StringType.INSTANCE) .list();注意,也可以在这个例子中用setString()实参绑定方法。
Hibernate实战_笔记31(混合继承策略、如何选择策略),布布扣,bubuko.com
Hibernate实战_笔记31(混合继承策略、如何选择策略)
原文:http://blog.csdn.net/com185272358/article/details/22333591