只是建一个表,所有属性都包括在此表。使用discriminator 到父和子类之间的区别。

1)父类(Article):

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 string) {
this.content = string;
} public Date getPostTime() {
return postTime;
} public void setPostTime(Date postTime) {
this.postTime = postTime;
} @Override
public String toString() {
return "Article [id=" + id + ", title=" + title + ", content="
+ content + ", postTime=" + postTime + "]";
} }

2)子类(Topic):

public class Topic extends Article {
private Integer type; public Integer getType() {
return type;
} public void setType(Integer type) {
this.type = type;
} @Override
public String toString() {
return "Topic [id=" + getId() + ", title=" + getTitle() +
", content=" + getContent() + ", postTime=" +
getPostTime() + ", type=" + type + "]";
}
}

3)子类(Reply):

public class Reply extends Article {
private Integer floor; public Integer getFloor() {
return floor;
} public void setFloor(Integer floor) {
this.floor = floor;
} @Override
public String toString() {
return "Reply [id=" + getId() + ", title=" + getTitle() +
<span style="white-space:pre"> </span>", content=" + getContent() + ", postTime=" +
<span style="white-space:pre"> </span> getPostTime() + ", floor=" + floor + "]";
}
}

4)持久化层:

package extends_1;

import java.sql.Date;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test; public class ExtendsDao { /**
* save 方法
*/
@Test
public void testSave() {
Session session = SessionFactoryTools.getSession();
Transaction tx = null;
try {
tx = session.beginTransaction(); // ========================================== // 新建对象并设置属性
Article article = new Article();
article.setTitle("article");
article.setContent("你是我的玫瑰!");
article.setPostTime(new Date(20140731)); Topic topic = new Topic();
topic.setTitle("topic"); Reply reply = new Reply();
reply.setTitle("reply"); // 保存对象
session.save(article);
session.save(topic);
session.save(reply); // ============================================ tx.commit();
} catch (RuntimeException e) {
if (tx != null) {
tx.rollback();
}
throw e;
} finally {
session.close();
}
} /**
* getById方法
*/
@Test
public void testGetById() {
Session session = SessionFactoryTools.getSession();
Transaction tx = null;
try {
tx = session.beginTransaction(); // ======================================================== // 读取数据并输出
Article article = (Article) session.get(Article.class, 1);
System.out.println(article); Article topic = (Article) session.get(Topic.class, 2);
System.out.println(topic); Article reply = (Article) session.get(Reply.class, 3);
System.out.println(reply); // ========================================================== tx.commit();
} catch (RuntimeException e) {
if (tx != null) {
tx.rollback();
}
throw e;
} finally {
session.close();
}
}
}

5)Article.hbm.xml文件配置:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="extends_1"> <!--
discriminator-value属性:
用于鉴别是哪个类的一个值,表示这个值就是这个类。 假设不写。默觉得类的全限定名。
-->
<class name="Article" table="article discriminator-value="Article">
<id name="id">
<generator class="native"/>
</id> <!-- 用于鉴别是什么类型的一个类 -->
<discriminator type="string" column="class_">
</discriminator> <property name="title"/>
<property name="content" type="text" length="10000"/>
<property name="postTime" type="timestamp"/> <!-- 子类:Topic -->
<subclass name="Topic" discriminator-value="Topic">
<property name="type"></property>
</subclass> <!-- 子类:Reply -->
<subclass name="Reply" discriminator-value="Reply">
<property name="floor"></property>
</subclass> </class> </hibernate-mapping>

6)主文件配置略。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

Hibernate_10_继承的例子_单表的更多相关文章

  1. SQL基本查询_单表查询(实验二)

    SQL基本查询_单表查询(实验二) 查询目标表结构及数据 emp empno ename job hiedate sal comn deptno 1007 马明 内勤 1992-6-12 4000 2 ...

  2. Hibernate中的HQL的基本常用小例子,单表查询与多表查询

    <span style="font-size:24px;color:#3366ff;">本文章实现HQL的以下功能:</span> /** * hql语法: ...

  3. mysql_数据查询_单表查询

    1.单表查询: 1.1选中表中若干列: SELECT子句的<目标列表达式>可以是表中属性列,也可以是表达式,还可以是字符常量. SELECT Sname,'year of birth:', ...

  4. 1.SSM整合_单表的增删改查

    目标:增删改查 环境:Maven+Eclipse+Tomcat7+JDK7 思维导图: 表结构 目录结构 依赖 <dependencies> <dependency> < ...

  5. Oracle 优化器_访问数据的方法_单表

    Oracle 在选择执行计划的时候,优化器要决定用什么方法去访问存储在数据文件中的数据.我们从数据文件中查询到相关记录,有两种方法可以实现:1.直接访问表记录所在位置.2.访问索引,拿到索引中对应的r ...

  6. ActiveRecord-连接多张表之单表继承

    ActiveRecord-连接多张表之单表继承 1. 基本概念 Rails提供了两种机制,可以将复杂的面向对象模型映射为关系模型,即所谓的单表继承(single-table inheritance)和 ...

  7. python flask_sqlalchemy 多态 polymorphic 实现单表继承

    sqlalchemy 多态 polymorphic 实现单表继承 sqlaclchemy中的单表继续就是以一个模型类为基类,其他模型类继承基类,所有模型类的的数据都存一张表里面(也可以是多张,只不过基 ...

  8. springdata 查询思路:基本的单表查询方法(id,sort) ---->较复杂的单表查询(注解方式,原生sql)--->实现继承类---->复杂的多表联合查询 onetomany

    springdata 查询思路:基本的单表查询方法(id,sort) ---->较复杂的单表查询(注解方式,原生sql)--->实现继承类---->复杂的多表联合查询 onetoma ...

  9. $Django 模板层(模板导入,继承)、 单表*详(增删改查,基于双下划线的查询)、static之静态文件配置

    0在python脚本中使用django环境 import osif __name__ == '__main__':    os.environ.setdefault("DJANGO_SETT ...

随机推荐

  1. 基本介绍LINUX远程PC软件:PUTTY、SecureCRT、X-Manager

    ***********************************************声明************************************************ 原创 ...

  2. Android - match_parent 和 fill_parent差异

    Android - match_parent 和 fill_parent差异 本文地址: http://blog.csdn.net/caroline_wendy match_parent 和 fill ...

  3. TCP/IP具体解释--nagle算法和TCP_NODELAY

    在client一直给server发送小数据的时候,接受到一个回应会在非常长的时间以后,可是将多个小数据写操作合并成一个写操作,问题就没了. 这个事件的缘由可能是TCP_NODELAY的原因 如今大概明 ...

  4. JavaFX横幅类游戏开发 教训 游戏贴图

    上一节课,我们即将完成战旗Demo有了一个大概的了解.教训这,我们将学习绘制游戏地图. 由于JavaFX 2.2中添加了Canvas相关的功能,我们就能够使用Canvas来实现游戏绘制了. 游戏地图绘 ...

  5. Android截图

    Android截图很好的实现,从文档的发展,查看View有一个接口getDrawingCache(),这个接口可以得到View当调用这个接口的位图图像Bitmap. 抓取截图View在图像的某一个时刻 ...

  6. android采用videoView播放视频(包装)

    //android播放视频.用法:于androidManifest.xml添加activity, // <activity android:name=".PlayVideo" ...

  7. oracle设备

    # Oracle Environment export ORACLE_BASE=/opt/oracle export ORACLE_HOME=/opt/oracle/product/11gR2/db ...

  8. 【Leetcode】Partition List (Swap)

    Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...

  9. js 自己容易搞混的笔记查询

    相似的操作 var str2 = "0123456789"; console.log(str2.slice(4,7)); //------------"456" ...

  10. Dom7.js 源码阅读备份

    在Framework7,其特色的HTML框架,可以创建精美的iOS应用;  她有自己的 DOM7- 一个集成了大部分常用DOM操作的高性能库.你不需要学习任何新的东西,因为她的用法和大名鼎鼎的jQue ...