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




<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



<hibernate-configuration><session-factory><property name="connection.username">rootproperty><property name="connection.password">rootproperty><property name="connection.driver_class">com.mysql.jdbc.Driverproperty><property name="connection.url">jdbc:mysql://localhost:3306/hibernate01property><property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialectproperty><property name="show_sql">trueproperty><property name="format_sql">trueproperty><property name="hbm2ddl.auto">updateproperty><property name="connection.isolation">2property><property name="use_identifier_rollback">trueproperty><property name="c3p0.max_size">100property><property name="c3p0.min_size">5property><property name="c3p0.acquire_increment">2property><property name="c3p0.idle_test_period">2000property><property name="c3p0.timeout">2000property><property name="c3p0.max_statements">10property><property name="jdbc.fetch_size">100property><property name="jdbc.batch_size">30property><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 persons = session.createQuery("FROM Person").list();System.out.println(persons.size());//查询父类数据,也只需查询一张表List 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();}}

四,运行结果

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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部