先说点别的。有人说写程序改异常就像是追女孩子。刚开始写这个程序就像刚见到某个女孩子,你得告诉她你喜欢她啊。于是你第一次去给人家说,结果被拒绝了,此时就像是碰到了程序中的异常,这时不要急,耐心的分析一下问题所在,然后再次去说,被拒绝了再去说...说上那么十几次估计就成了。就算不成,那你也是长了经验了,下次碰到这类问题(异常/女生)你就有经验了,就能很快拿下。如果还是不成功,那只能说明人家女生比你更有经验!
貌似有点道理,不过我异常是改了N多个了,成功率也很高,可是追女孩子却是几乎从未有过...
O(∩_∩)O哈哈~,扯完了,入正题。
假如我现在有Pig类和Bird类,且均继承自Animal类。我现在需要将他们存到数据库中,且各属性均放在一张表中。这样的映射文件该如何写呢?
首先来映射父类Animal类。
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="cn.ineeke.entity"> <class name="Animal" table="T_animal"> <id name="id"> <generator class="native"/> </id> <property name="name" type="java.lang.String"/> <property name="sex" type="java.lang.Boolean"/> </class> </hibernate-mapping>
之前都是每个类都有其自己的一个映射文件,此次则全都写在同一文件中。接着增加Pig类的映射。由于Pig类是继承自Animal类,所以这里使用
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="cn.ineeke.entity"> <class name="Animal" table="T_animal"> <id name="id"> <generator class="native"/> </id> <property name="name" type="java.lang.String"/> <property name="sex" type="java.lang.Boolean"/> <subclass name="Pig"> <property name="weight" type="java.lang.Integer" /> </subclass> </class> </hibernate-mapping>
同理,对Bird类进行映射。可是,这么存储的话,没法分辨出哪条数据是Pig哪条数据是Bird。所以,还需要增加一列type,用来进行类别区分,在映射文件中则需要使用
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="cn.ineeke.entity"> <class name="Animal" table="T_animal"> <id name="id"> <generator class="native"/> </id> <discriminator column="type" type="java.lang.String"/> <property name="name" type="java.lang.String"/> <property name="sex" type="java.lang.Boolean"/> <subclass name="Pig" discriminator-value="P"> <property name="weight" type="java.lang.Integer" /> </subclass> <subclass name="Bird" discriminator-value="B"> <property name="height" type="java.lang.Integer"/> </subclass> </class> </hibernate-mapping>
那么数据库中所对应的表结构就应该是下图这样了。
» 除非另有声明,本站文章均为原创。
» 转载原创文章请以链接形式注明:
» 转载自:[Neeke] » [Hibernate单表继承映射]
» 本文链接地址: http://www.ineeke.com/archives/830/
» 如果喜欢可以:点此邮件订阅或者点此阅读器订阅
哈哈·开头的那个比喻我喜欢·有才···
再送你一句。
写程序就像女孩的裙子,越短越好·
为啥我找程序错误很容易,但是找女朋友就不行了
从中悟出的道理是:学习跟追女孩都一样,不要脸才会成功,呵呵
我明天回家去了哦!
可能有几天不能上网,所以提前祝你新年快乐了哦!