Hibernate_11_继承实例_多表

<1>每个类都建立一张表,抽象类也建立一张表,各张表中只包含自
 己的属性,子类继承的属性不用在子类中显示。

   父类 Article,子类Topic 、Reply 、Session生成类、持久化层 、主文件配置 (与10中相同)

Article.hmb.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_2">

	<!--每个类对应一张表,抽象类也对应一张表,
		每个表只含有本类所对应的属性
		每个类中都对应一个表名
		每个子类都有外键约束
	-->
	<class name="Article" table="article">
		<id name="id">
			<generator class="native" />
		</id>

		<property name="title" />
		<property name="content" type="text" length="10000" />
		<property name="postTime" type="timestamp" />

		<!-- 子类:Topic -->
		<joined-subclass name="Topic" table="topic">
			<key column="t_id"></key>
			<property name="type"></property>
		</joined-subclass>

		<!-- 子类:Reply -->
		<joined-subclass name="Reply" table="reply">
			<key column="r_id"></key>
			<property name="floor"></property>
		</joined-subclass>

	</class>

</hibernate-mapping>

<2>每个实体类都对应一张表,抽象类不建立表,各张表中包含自
 己所有的属性。

父类 Article,子类Topic 、Reply 、Session生成类、

主文件配置 (与14中相同)

持久化层的代码:

public class ExtendsDao {

	/**
	 * save 方法
	 */
	@Test
	public void testSave() {
		Session session = SessionFactoryTools.getSession();
		Transaction tx = null;
		try {
			tx = session.beginTransaction();

			// ==========================================

			// 新建对象并设置属性
			Topic topic = new Topic();
			topic.setTitle("topic");

			Reply reply = new Reply();
			reply.setTitle("reply");

			// 保存对象
			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 topic = (Article) session.get(Topic.class, 0);
			System.out.println(topic);

			Article reply = (Article) session.get(Reply.class, 1);
			System.out.println(reply);

			// ==========================================================

			tx.commit();
		} catch (RuntimeException e) {
			if (tx != null) {
				tx.rollback();
			}
			throw e;
		} finally {
			session.close();
		}
	}
}

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_3">

	<!--每个实体类对应一张表,抽象类不对应表,每个表含有本类所对应全部的属性
	-->
	<class name="Article" abstract="true">
		<id name="id">
			<!-- 当每个实例都有一张表时,主键生成策略不能使用indentity,
			     因为在整个集成结构中,主键值是不能重复的。
			 -->
			<generator class="hilo" >
				<param name="table">hilo_value</param>
				<param name="column">next_value</param>
				<param name="max_lo">0</param>
			</generator>
		</id>

		<property name="title" />
		<property name="content" type="text" length="10000" />
		<property name="postTime" type="timestamp" />

		<!-- 子类:Topic -->
		<union-subclass name="Topic" table="topic">
			<property name="type"></property>
		</union-subclass>

		<!-- 子类:Reply -->
		<union-subclass name="Reply" table="reply">
			<property name="floor"></property>
		</union-subclass>

	</class>

</hibernate-mapping>

Hibernate_11_继承实例_多表

时间: 2024-11-07 00:00:06

Hibernate_11_继承实例_多表的相关文章

算法实例_线性表 By:比方

算法实例_线性表 By:比方 什么是线性表? 从线性表的功能逻辑上来看,线性表就是由n(n>=0)个数据元素的排序组合,数据由x1,x2,x3,...,xn结构有序的顺序排列. 线性表的结构和特点 1.              仅有一个开始节点x1,没有直接前趋节点,有妾只有一个直接后续节点x2: 2.              仅有一个终结节点xn,仅有一个前趋节点xn-1; 3.              对于同一个线性表,其中没一个数据的元素,都必须具备相同的数据结构类型, 且没一个元素

js实例_当鼠标移动到某个元素上时在元素下面显示一段提示文字

效果: 当鼠标不在自动登录上时,只显示自动登录这个表单,下面的div提示则隐藏. 当鼠标移动到自动登录这个表单时,则显示下面的div提示,当鼠标移出时再将其隐藏 代码实现与原理: HTML代码: <body> <input type="checkbox" />自动登录 <div id="div1">不要再玩游戏啦!!!</div> </body> CSS代码:给id为div1的元素做一下修饰,并且将其最开始

赵雅智_android实例_当监听类有数据更新时下拉刷新

之前两篇文章分别介绍了OnScrollListener的实现和ContentProvider监听数据的变化,下面我们就结合者两个知识点实现一个小项目 项目需求 使用当ContentProvider监听类有数据更新时,在当前界面进行提示,并用OnScrollListener实现下拉刷新 实现效果 通过ContentProvider显示数据在界面 当监听类发生变化时 下拉刷新后显示数据 实现步骤 android_sqlite项目 定义操作标识 匹配结果码 继承ContentProvider类重写方法

sql事务(Transaction)用法介绍及回滚实例_转

sql事务(Transaction)用法介绍及回滚实例 事务(Transaction)是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性 当对多个表进行更新的时候,某条执行失败.为了保持数据的完整性,需要使用事务回滚. 显示设置事务 代码如下 begin try   www.2cto.com begin transaction insert into shi

算法实例_链表结构 By:比方

前一章,我们说到了顺序表结构,而顺序表也存在一些的缺点. 在插入或者删除节点的时候,需要移动的数据比较大,如果顺序表结构比较大,有时候比较难以分配足够的连续存储空间,可能会导致内存分配失败,而导致无法存储. 而今天我们讲解的链表结构则可以很好的解决这个问题,链表的结构是一种动态存储分配的结构形式,可以根据需要动态申请所需的内存单元. 一.什么是链表结构? a)         我们用head来表示头节点. b)         数据部分保存的是存储的数据,地址地方指向下一个数据的起始部分,依次向

C++类的继承实例

首先由三个类分别为DateType(日期类).TimeType(时间类).DateTimeType(日期时间内).具体代码如下: #include <iostream> using namespace std; class DateType { int year,month,day; public: DateType(int year = 2000,int month = 12,int day = 1) { this->year = year; this->month = mont

oralce_倒库_导表总结

1.备份导出,还是先获得原库的表空间,就是一个存储过程,可以导出来所有的创建的表空间语法,然后使用 EXP system/oracle file=d:\sss.dmp log=d:\ss.log full=y此时,为将整个库备份出来. EXP system/oracle file=d:\sss.dmp log=d:\ss.log owner=tom,则为导出名为tom用户下的所有对象. 2.然后在导入时,同样,还是先由1处获得的表空间,来创建一下,然后再用命令 imp system/oracle

sql面试题(学生表_课程表_成绩表_教师表)

sql面试题(学生表_课程表_成绩表_教师表) 原帖链接:http://bbs.csdn.net/topics/280002741 表架构 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 建表语句 CREATE TABLE student ( s# INT, sname nvarchar(32), sage INT, ssex nvarchar(8)

每天一个JavaScript实例-检測表单数据

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>每天一个JavaScript实例-检測表单数据</title> <style> [role="alert"]{ background-color: #f