日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

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

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

首先有一個文章類(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(); } } }


 

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美一级免费大片 | 成人高潮片免费视频 | 成年人免费在线观看 | 久久久久国产精品一区 | 日本综合在线视频 | 欧美成人在线网站 | 亚洲高清免费 | 欧美精品久久久 | 免费网站黄 | 欧美国产精品一区二区三区 | 国产麻豆精品在线观看 | 免费av高清 | 色呦呦视频在线观看 | 久久精品99国产精品 | 中文字幕在线三区 | 久9re热视频这里只有精品 | 亚洲精品黄色 | 亚洲免费精品 | 国产日韩精品视频一区二区三区 | 99re66热这里只有精品8 | 999在线视频 | 国产精品成人3p一区二区三区 | 麻豆视频在线观看免费网站黄 | 亚洲第一视频网站 | 欧美天堂 | 免费一级毛片视频 | 国产成人一区二区 | av黄在线 | 91成人在线视频 | 国产精品视频一区二区三区不卡 | 精品国产高清一区二区三区 | 五月婷婷中文字幕 | 国产精品一区二区免费 | 黄片毛片在线观看 | 在线h片 | 欧日韩不卡在线视频 | 日韩区一区二 | 99在线观看视频 | 色婷婷中文 | 亚洲午夜小视频 | 欧美一级大片免费看 |