hibernate之多态关联(多态的多对一,利用any,使用每个具体类一张表的策略)
下面以关联映射中映射的持久化类中声明了any为例,注意,这个例子是单向导航的:
pom.xml:
resources/hibernate.cfg.xml:
pojo/User.java:
pojo/User.hbm.xml:
pojo/BillingDetails.java:
pojo/CreditCard.java:
pojo/CreditCard.hbm.xml:
pojo/BankAccount.java:
pojo/BankAccount.hbm.xml:
util/HibernateUtil.java:
util/Manager.java:
表结构:
上例的USER表中,除了BILLINGDETAILS_ID之外,还需要BILLINGDETAILS_TYPE列,这个额外的列作用就像额外的辨别标志一样。
meta-type属性指定BILLINGDETAILS_TYPE列的hibernate类型;id-type属性指定BILLINGDETAILS_ID列的类型(CreditCard和BankAccount必须有相同的标识符类型)。
<meta-value>元素告诉hibernate如何解释BILLINGDETAILS_TYPE列的值,在这里不需要使用完整表名---可以使用你喜欢的任何值作为类型辨别标志,如:BA,CC.