只是建一个表,所有属性都包括在此表。使用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. Codeforces Round #256 (Div. 2) D. Multiplication Table 二分法

     D. Multiplication Table time limit per test 1 second memory limit per test 256 megabytes input st ...

  2. Android网络图片显示在ImageView 上面

    在写这篇博文的时候,我參与了一个项目的开发,里面涉及了非常多网络调用相关的问题,我记得我在刚刚開始做android项目的时候,以前就遇到这个问题,当时在网上搜索了一下,发现了一篇博文,如今与大家分享一 ...

  3. 如何使用Eclipse API 提供 org.eclipse.wst.wsdl 要解决阅读WSDL档?

    相对而言.Eclipse API中国的数据是比较小的.但Eclipse的API提供了许多的.非常强大. 实例,eclipse的Eclipse API 提供 org.eclipse.wst.wsdl包裹 ...

  4. 【LeetCode】- Valid Palindrome(右回文)

    [ 问题: ] Given a string, determine if it is a palindrome, considering only alphanumeric characters an ...

  5. CMSIS标准

    CMSIS 标准(Cortex Microcontroller Software Interface Standard) ,翻译过来是"ARM Cortex™ 微控制器软件接口标准" ...

  6. IP多播(组播)

    IP多播是实现数据一对多通信的模式.从一个源点传送到多个目的地,数据仅仅拷贝一份.这里说的数据仅仅拷贝一份,是指在每一条须要它的两个点之间,数据仅仅有一份.例如以下图为<计算机网络>(谢希 ...

  7. SVM算法实现(一)

    关键字(keywords):SVM 支持向量机 SMO算法 实现 机器学习 假设对SVM原理不是非常懂的,能够先看一下入门的视频,对帮助理解非常实用的,然后再深入一点能够看看这几篇入门文章,作者写得挺 ...

  8. MongoDB(三)——CRUD

    MongoDB作为非关系型数据库.还是传统数据库的增删改查有很大的差别的.这里仅仅是将知识点进行了一下提纲挈领,实际用的时候.我们百度一下具体使用方法就可以. 先看大的几个方面: 一.对于里边的插入和 ...

  9. js Array 阵列扩展方法

    //又来了 Array.prototype.unique = function() { this.sort(); var re=[this[0]]; for(var i = 1; i < thi ...

  10. android 渐变drawable

    渐变Drawable它是使用<gradient>的标记的形状Drawable定义子节点的定义. 每个梯度Drawable求至少要有一个startColor和endColor属性,而且支持一 ...