package com.baidu.jionSubclass;
import java.util.List;
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 TestJionSubclassPerson {
private SessionFactory sessionFactory;
private Session session;
private Transaction transaction;
@Before
public void init(){
Configuration configuration = new Configuration().configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
.applySettings(configuration.getProperties())
.buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
session = sessionFactory.openSession();
transaction = session.beginTransaction();
}
@After
public void destroy(){
transaction.commit();
session.close();
sessionFactory.close();
}
/**
* 查询:
* 1. 查询父类记录,需要做一个左外连接查询
* 2. 对于子类记录,需要做一个内连接查询
*
*jionSubclass 优点:
* 1. 不需要使用辨别者列
* 2. 子类特有的字段可以使用非空约束
* 3. 没有冗余的字段
*
*/
@Test
public void testGet() {
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());
}
/**
* 插入操作:
* 1. 对于子类对象至少需要把记录插入到 两张 数据表中
*/
@Test
public void testSave() {
Person person = new Person();
person.setAge(15);
person.setName("Person-CC");
Student student = new Student();
student.setAge(10);
student.setName("Student-CC");
student.setSchool("Student_school2");
session.save(person);
session.save(student);
}
}