package com.baidu.UnionSubclass;
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 TestJionUnionSubclassPerson {
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();
}
@Test
public void testUpdate() {
String hql = "UPDATE Person p SET p.age = 20";
session.createQuery(hql).executeUpdate();
}
/**
* 查询:
* 1. 查询父类记录,需把父表和子表记录汇总到一起在做查询,性能稍差。
*
*jionSubclass 优点:
* 1. 不需要使用辨别者列
* 2. 子类特有的字段可以使用非空约束
*
* 缺点:
* 1.存在冗余的字段
* 2. 若更新父表的字段,则更新的效率较低。
*/
@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());
}
/**
* 插入操作:
*
*/
@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);
}
}