多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > Hibernate關聯關系映射之繼承映射

Hibernate關聯關系映射之繼承映射

來源:程序員人生   發布時間:2014-10-10 08:00:01 閱讀次數:2263次

首先有一個文章類(Article)類中有id、title、content、postTime等屬性。

package entity; import java.util.Date; public class Article { private Integer id; private String title; private String content; private Date postTime; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public Date getPostTime() { return postTime; } public void setPostTime(Date postTime) { this.postTime = postTime; } }

然后看他的子類,Topic類和Reply類。他們除了父類的屬性外還有自己獨特的屬性。

package entity; public class Topic extends Article{ private int type; public int getType() { return type; } public void setType(int type) { this.type = type; } }
package entity; public class Reply extends Article{ private int floor; public int getFloor() { return floor; } public void setFloor(int floor) { this.floor = floor; } }

繼承映射的方式有三種方式,我們一個個看:

方式一:將父類和子類的信息存放在同一個表中,然后在該數據表中有個字段用來表示該條記錄的類型,其中子類獨有的屬性允許為空。我們看一下映射配置文件。

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="entity"> <class name="entity.Article" table="article" schema="MYHR" discriminator-value="Article"> <id name="id" type="int"> <column name="ID" /> <generator class="assigned" /> </id> <!-- 用于鑒別是什么類型的一個列 --> <discriminator type="string" column="t_class"/> <property name="title"/> <property name="content" type="clob" length="5000"/> <property name="postTime" type="timestamp"/> <subclass name="Topic" discriminator-value="Topic"> <property name="type" type="int"/> </subclass> <subclass name="Reply" discriminator-value="Reply"> <property name="floor" type="int"/> </subclass> </class> </hibernate-mapping>

方式二:父類和子類不在同一張表中,且每一個類一張表,抽象類對應一張表,這是配置子類使用joined-subclass

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="entity"> <class name="entity.Article" table="article" schema="MYHR"> <id name="id" type="int"> <column name="ID" /> <generator class="assigned" /> </id> <property name="title" /> <property name="content" type="clob" length="5000" /> <property name="postTime" type="timestamp" /> <joined-subclass name="Topic" table="topic"> <key column="id" /> <property name="type" type="int" /> </joined-subclass> <joined-subclass name="Reply" table="reply"> <key column="id" /> <property name="floor" type="int" /> </joined-subclass> </class> </hibernate-mapping>

方式三:每一個類單獨一張表,并且抽象類不對應一張表,子類對應的數據庫表中對應全部的屬性,包括從父類繼承的信息。

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="entity"> <!-- 采用每個具體類一張表,抽象類不對應表,abstract默認為false,設為true表示為抽象的不對應表 --> <class name="entity.Article" abstract="true" schema="MYHR"> <id name="id" type="int"> <column name="ID" /> <generator class="assigned" /> </id> <property name="title" /> <property name="content" type="clob" length="5000" /> <property name="postTime" type="timestamp" /> <union-subclass name="Topic" table="topic"> <property name="type" type="int" /> </union-subclass> <union-subclass name="Reply" table="reply"> <property name="floor" type="int" /> </union-subclass> </class> </hibernate-mapping>

然后看一下測試類,三種方式測試類相同,只有方式三的save方法中因為抽象類沒有單獨的數據表因此不能存儲他們父類的信息。

package test; import org.hibernate.Session; import org.hibernate.Transaction; import entity.Article; import entity.Reply; import entity.Topic; import factory.HibernateSessionFactory; public class Test { private Session session = null; private Transaction tran = null; @org.junit.Test public void save() { session = HibernateSessionFactory.getSession(); tran = session.beginTransaction(); try{ Article article = new Article(); article.setId(1); article.setTitle("這是一個Article"); Topic topic = new Topic(); topic.setId(2); topic.setTitle("這是一個Topic"); Reply reply = new Reply(); reply.setId(3); reply.setTitle("這是一個reply"); session.save(article); session.save(topic); session.save(reply); tran.commit(); }catch(Exception e){ tran.rollback(); } } @org.junit.Test public void Get() { session = HibernateSessionFactory.getSession(); tran = session.beginTransaction(); try{ Article a = (Article)session.get(Article.class, 1); Topic t = (Topic)session.get(Topic.class, 2); Reply r = (Reply)session.get(Reply.class, 3); System.out.println(a.getTitle()); System.out.println(t.getTitle()); System.out.println(r.getTitle()); tran.commit(); }catch(Exception e){ tran.rollback(); } } }


 

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 精品影视网站入口 | 日本网站在线 | 一级毛片ab片高清毛片 | 亚洲自拍偷拍视频 | 亚洲伊人久久大香线焦 | 亚洲高清在线天堂精品 | 手机福利在线观看 | 色综合久久综合欧美综合图片 | 欧美13一14sexvideo欧 | 破处毛片| 国产一区二区三区亚洲综合 | 日本一区二区三区四区在线观看 | 中文字幕网站在线 | 一二三四观看视频中文在线观看 | 午夜影院在线免费观看 | 图片区小说区号综合区 | 伊人丁香婷婷综合一区二区 | 国产在线视频一区 | 中文字幕在线播 | 亚洲综合小说久久另类区 | 国产成人在线免费视频 | 亚洲欧美视频网站 | 久久精品国产69国产精品亚洲 | 亚洲图片综合网 | 成人国产精品一级毛片视频 | 国产成人亚洲精品91专区手机 | 免费在线亚洲视频 | 欧美三级大片在线观看 | 免费人成毛片乱码 | 91精品乱码一区二区三区 | 波多野结衣在线观看视频 | 国产精品久久网 | 亚洲午夜伦理 | 大香网伊人久久综合网2020 | 国产精品网站在线观看 | 中文字幕乱码视频 | 激情另类国内一区二区视频 | 波多野结衣国产一区二区三区 | 国产欧美高清 | 国产欧美成人免费观看视频 | 欧美日韩亚洲精品一区 |