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

相关文章

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

SpringValidation数据校验之约束注解与分组校验方式

《SpringValidation数据校验之约束注解与分组校验方式》本文将深入探讨SpringValidation的核心功能,帮助开发者掌握约束注解的使用技巧和分组校验的高级应用,从而构建更加健壮和可... 目录引言一、Spring Validation基础架构1.1 jsR-380标准与Spring整合1

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

resultMap如何处理复杂映射问题

《resultMap如何处理复杂映射问题》:本文主要介绍resultMap如何处理复杂映射问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录resultMap复杂映射问题Ⅰ 多对一查询:学生——老师Ⅱ 一对多查询:老师——学生总结resultMap复杂映射问题

Spring中配置ContextLoaderListener方式

《Spring中配置ContextLoaderListener方式》:本文主要介绍Spring中配置ContextLoaderListener方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录Spring中配置ContextLoaderLishttp://www.chinasem.cntene

AJAX请求上传下载进度监控实现方式

《AJAX请求上传下载进度监控实现方式》在日常Web开发中,AJAX(AsynchronousJavaScriptandXML)被广泛用于异步请求数据,而无需刷新整个页面,:本文主要介绍AJAX请... 目录1. 前言2. 基于XMLHttpRequest的进度监控2.1 基础版文件上传监控2.2 增强版多

Docker镜像修改hosts及dockerfile修改hosts文件的实现方式

《Docker镜像修改hosts及dockerfile修改hosts文件的实现方式》:本文主要介绍Docker镜像修改hosts及dockerfile修改hosts文件的实现方式,具有很好的参考价... 目录docker镜像修改hosts及dockerfile修改hosts文件准备 dockerfile 文

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的