Hibernate入门07_继承映射02_joined方式

2023-10-11 23:50

本文主要是介绍Hibernate入门07_继承映射02_joined方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、hibernate继承映射之joined方式

joined方式:子类从父类继承的字段存放在父类的表里,子类自己独有的字段存在自己的表里

这里写图片描述

二、还是以Student继承Person为例

三、代码

public class Person {private Integer id;private String name;private String age;//get/set...
}public class Student extends Person {private String school;//get/set...
}

Person.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">
<!-- Generated 2017-3-27 22:49:29 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping package="com.hibernate.n2n"><class name="Person" table="PERSONS"><id name="id" type="java.lang.Integer"><column name="ID" /><generator class="native" /></id><property name="name" type="java.lang.String"><column name="NAME" /></property><property name="age" type="java.lang.String"><column name="AGE" /></property><joined-subclass name="Student" table="STUDENTS"><key column="STUDENT_ID"></key><property name="school" type="string" column="SCHOOL"></property></joined-subclass></class>
</hibernate-mapping>

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration><session-factory><!-- 配置链接数据库的基本信息 --><property name="connection.username">root</property><property name="connection.password">root</property><property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="connection.url">jdbc:mysql://localhost:3306/hibernate01</property><!-- hibernate的基本信息 --><!-- hibernate使用的数据库方言 --><property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property><!-- 执行操作时是否在控制台打印sql语句 --><property name="show_sql">true</property><!-- 是否对sql进行格式化 --><property name="format_sql">true</property><!-- 指定自动生成数据表的策略 --><property name="hbm2ddl.auto">update</property><!-- 设置hibernate的隔离级别 --><property name="connection.isolation">2</property><!-- 删除对象后,设置其OID为null --><property name="use_identifier_rollback">true</property><!-- 配置C3P0数据源 --><property name="c3p0.max_size">100</property><property name="c3p0.min_size">5</property><property name="c3p0.acquire_increment">2</property><property name="c3p0.idle_test_period">2000</property><property name="c3p0.timeout">2000</property><property name="c3p0.max_statements">10</property><!-- 设置JDBC的statement读取数据库的时候每次从数据库中读取记录条数,这个值100合适,太大会损耗内存,小了速度慢 --><property name="jdbc.fetch_size">100</property><!-- 设置数据库进行批量删除,更新,插入的时候批次的大小,30比较合适 --><property name="jdbc.batch_size">30</property><!-- 指定关联的hbm.xml文件 --><mapping resource="com/hibernate/n2n/Person.hbm.xml"/>      </session-factory>
</hibernate-configuration>

测试代码,Test

package com.hibernate.n2n;import static org.junit.Assert.*;import java.util.List;
import java.util.Set;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;public class HibernateTest {private SessionFactory sessionFactory;private Session session;private Transaction transaction;/**** 插入性能稍弱*/@Testpublic void testSave(){Person person = new Person();person.setAge("22");person.setName("AA");session.save(person);Student student = new Student();student.setSchool("BB");student.setAge("18");student.setName("CC");session.save(student);}/**** 查询性能也稍弱* 没有冗余的字段*/@Testpublic void testQuery(){//查询父类数据,只需查询一张表List<Person> persons = session.createQuery("FROM Person").list();System.out.println(persons.size());//查询父类数据,也只需查询一张表List<Student> students = session.createQuery("FROM Student").list();System.out.println(students.size());}@Beforepublic void init() {System.out.println("HibernateTest.init()");// 1.创建一个sessionFactory对象Configuration configuration = new Configuration().configure();ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();sessionFactory = configuration.buildSessionFactory(serviceRegistry);// 2.创建一个session对象session = sessionFactory.openSession();// 3.开启事务transaction = session.beginTransaction();}@Afterpublic void destroy() {System.out.println("HibernateTest.destroy()");// 5.提交事务transaction.commit();// 6.关闭sessionsession.close();// 7.关闭SessionFactorysessionFactory.close();}}

四,运行结果

这里写图片描述
这里写图片描述
这里写图片描述

这篇关于Hibernate入门07_继承映射02_joined方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/191734

相关文章

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

C++11委托构造函数和继承构造函数的实现

《C++11委托构造函数和继承构造函数的实现》C++引入了委托构造函数和继承构造函数这两个重要的特性,本文主要介绍了C++11委托构造函数和继承构造函数的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录引言一、委托构造函数1.1 委托构造函数的定义与作用1.2 委托构造函数的语法1.3 委托构造函

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

Java 继承和多态的作用及好处

《Java继承和多态的作用及好处》文章讲解Java继承与多态的概念、语法及应用,继承通过extends复用父类成员,减少冗余;多态实现方法重写与向上转型,提升灵活性与代码复用性,动态绑定降低圈复杂度... 目录1. 继承1.1 什么是继承1.2 继承的作用和好处1.3 继承的语法1.4 子类访问父类里面的成

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务

Java继承映射的三种使用方法示例

《Java继承映射的三种使用方法示例》继承在Java中扮演着重要的角色,它允许我们创建一个类(子类),该类继承另一个类(父类)的所有属性和方法,:本文主要介绍Java继承映射的三种使用方法示例,需... 目录前言一、单表继承(Single Table Inheritance)1-1、原理1-2、使用方法1-