• Hibernate(五)


    注解高级(原文再续书接上一回)

    7.继承映射

    第一种:InheritanceType.JOINED 查询时会出现很多join语句.

     1 package com.rong.entity.joined;
     2 
     3 import javax.persistence.Entity;
     4 import javax.persistence.GeneratedValue;
     5 import javax.persistence.GenerationType;
     6 import javax.persistence.Id;
     7 import javax.persistence.Inheritance;
     8 import javax.persistence.InheritanceType;
     9 import javax.persistence.Table;
    10 
    11 @Entity
    12 @Table(name="person")
    13 //所有的持久化都会生成表(子类表会引用父类表的主键列)
    14 //每个类都会生成一张表
    15 //子类的表中会默认引用父类中的id
    16 @Inheritance(strategy=InheritanceType.JOINED)
    17 public class Person {
    18     @Id
    19     @GeneratedValue(strategy=GenerationType.AUTO)
    20     private int id;
    21     private String name;
    22     private int age;
    23     public int getId() {
    24         return id;
    25     }
    26     public void setId(int id) {
    27         this.id = id;
    28     }
    29     public String getName() {
    30         return name;
    31     }
    32     public void setName(String name) {
    33         this.name = name;
    34     }
    35     public int getAge() {
    36         return age;
    37     }
    38     public void setAge(int age) {
    39         this.age = age;
    40     }
    41     @Override
    42     public String toString() {
    43         return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
    44     }
    45 }
     1 package com.rong.entity.joined;
     2 
     3 import javax.persistence.Entity;
     4 import javax.persistence.Table;
     5 
     6 @Entity
     7 @Table(name="student")
     8 public class Student extends Person{
     9     private String number;
    10 
    11     public String getNumber() {
    12         return number;
    13     }
    14 
    15     public void setNumber(String number) {
    16         this.number = number;
    17     }
    18 }

     1 package com.rong.test;
     2 
     3 import org.hibernate.Session;
     4 import org.hibernate.SessionFactory;
     5 import org.hibernate.Transaction;
     6 import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
     7 import org.hibernate.cfg.Configuration;
     8 import org.hibernate.service.ServiceRegistry;
     9 import org.junit.Test;
    10 
    11 import com.rong.entity.joined.Person;
    12 import com.rong.entity.joined.Student;
    13 
    14 public class HibernateTest {
    15     @Test
    16     public void test1(){
    17         Configuration configuration=new Configuration().configure();
    18         ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
    19         SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
    20         Session session = sessionFactory.openSession();
    21         Transaction transaction = session.beginTransaction();
    22         //插入
    23         Student student=new Student();
    24         student.setAge(18);
    25         student.setName("悠悠");
    26         student.setNumber("654321");
    27         session.save(student);
    28         //查询
    29         Person person=(Person)session.get(Person.class, 1);
    30         System.out.println(person);
    31         Student stu=(Student) session.get(Student.class, 1);
    32         System.out.println(stu.getId()+":"+stu.getName()+":"+stu.getNumber());
    33         transaction.commit();
    34         session.close();
    35         sessionFactory.close();
    36     }
    37 }

    第二种:InheritanceType.SINGLE_TABLE 所有子类属性中不能加非空约束

     

     1 package com.rong.entity.singletable;
     2 
     3 import javax.persistence.DiscriminatorColumn;
     4 import javax.persistence.DiscriminatorType;
     5 import javax.persistence.DiscriminatorValue;
     6 import javax.persistence.Entity;
     7 import javax.persistence.GeneratedValue;
     8 import javax.persistence.GenerationType;
     9 import javax.persistence.Id;
    10 import javax.persistence.Inheritance;
    11 import javax.persistence.InheritanceType;
    12 import javax.persistence.Table;
    13 
    14 @Entity
    15 @Table(name="person")
    16 @Inheritance(strategy=InheritanceType.SINGLE_TABLE)// 单个表
    17 @DiscriminatorColumn(name="dc",discriminatorType=DiscriminatorType.INTEGER)//辨别者列
    18 @DiscriminatorValue(value="0")// 辨别者列值
    19 public class Person {
    20     @Id
    21     @GeneratedValue(strategy=GenerationType.AUTO)
    22     private int id;
    23     private String name;
    24     private int age;
    25     public int getId() {
    26         return id;
    27     }
    28     public void setId(int id) {
    29         this.id = id;
    30     }
    31     public String getName() {
    32         return name;
    33     }
    34     public void setName(String name) {
    35         this.name = name;
    36     }
    37     public int getAge() {
    38         return age;
    39     }
    40     public void setAge(int age) {
    41         this.age = age;
    42     }
    43     @Override
    44     public String toString() {
    45         return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
    46     }
    47 }
     1 package com.rong.entity.singletable;
     2 
     3 import javax.persistence.DiscriminatorValue;
     4 import javax.persistence.Entity;
     5 import javax.persistence.Table;
     6 
     7 @Entity
     8 @Table(name="student")
     9 @DiscriminatorValue(value="1")// 辨别者列值
    10 public class Student extends Person{
    11     private String number;
    12 
    13     public String getNumber() {
    14         return number;
    15     }
    16 
    17     public void setNumber(String number) {
    18         this.number = number;
    19     }
    20 }
     1 package com.rong.test;
     2 
     3 import org.hibernate.Session;
     4 import org.hibernate.SessionFactory;
     5 import org.hibernate.Transaction;
     6 import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
     7 import org.hibernate.cfg.Configuration;
     8 import org.hibernate.service.ServiceRegistry;
     9 import org.junit.Test;
    10 
    11 import com.rong.entity.singletable.Person;
    12 import com.rong.entity.singletable.Student;
    13 
    14 public class HibernateTest {
    15     @Test
    16     public void test1(){
    17         Configuration configuration=new Configuration().configure();
    18         ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
    19         SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
    20         Session session = sessionFactory.openSession();
    21         Transaction transaction = session.beginTransaction();
    22         //插入
    23         Student student=new Student();
    24         student.setAge(16);
    25         student.setName("晓晓");
    26         student.setNumber("3824");
    27         session.save(student);
    28         Person person=new Person();
    29         person.setAge(19);
    30         person.setName("达达");
    31         session.save(person);
    32         //查询
    33         Person per=(Person)session.get(Person.class, 2);
    34         System.out.println(per);
    35         Student stu=(Student) session.get(Student.class, 1);
    36         System.out.println(stu.getId()+":"+stu.getName()+":"+stu.getNumber());
    37         transaction.commit();
    38         session.close();
    39         sessionFactory.close();
    40     }
    41 }

     

    第三种:InheritanceType.TABLE_PER_CLASS 这种策略主键不能用自增长.查询时会出现union运算.

     1 package com.rong.entity.tableperclass;
     2 
     3 import javax.persistence.Entity;
     4 import javax.persistence.Id;
     5 import javax.persistence.Inheritance;
     6 import javax.persistence.InheritanceType;
     7 import javax.persistence.Table;
     8 
     9 @Entity
    10 @Table(name="person")
    11 //所有的持久化都会生成表(子类会把父类中的属性继承过来生成在自己的表中)
    12 @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
    13 public class Person {
    14     @Id
    15     private int id;
    16     private String name;
    17     private int age;
    18     public int getId() {
    19         return id;
    20     }
    21     public void setId(int id) {
    22         this.id = id;
    23     }
    24     public String getName() {
    25         return name;
    26     }
    27     public void setName(String name) {
    28         this.name = name;
    29     }
    30     public int getAge() {
    31         return age;
    32     }
    33     public void setAge(int age) {
    34         this.age = age;
    35     }
    36     @Override
    37     public String toString() {
    38         return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
    39     }
    40 }
     1 package com.rong.entity.tableperclass;
     2 
     3 import javax.persistence.Entity;
     4 import javax.persistence.Table;
     5 
     6 @Entity
     7 @Table(name="student")
     8 public class Student extends Person{
     9     private String number;
    10 
    11     public String getNumber() {
    12         return number;
    13     }
    14 
    15     public void setNumber(String number) {
    16         this.number = number;
    17     }
    18 }
     1 package com.rong.test;
     2 
     3 import org.hibernate.Session;
     4 import org.hibernate.SessionFactory;
     5 import org.hibernate.Transaction;
     6 import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
     7 import org.hibernate.cfg.Configuration;
     8 import org.hibernate.service.ServiceRegistry;
     9 import org.junit.Test;
    10 
    11 import com.rong.entity.tableperclass.Student;
    12 public class HibernateTest {
    13     @Test
    14     public void test1(){
    15         Configuration configuration=new Configuration().configure();
    16         ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
    17         SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
    18         Session session = sessionFactory.openSession();
    19         Transaction transaction = session.beginTransaction();
    20         //插入
    21         Student student=new Student();
    22         student.setId(1);
    23         student.setAge(20);
    24         student.setName("扣扣");
    25         student.setNumber("1224832");
    26         session.save(student);
    27         //查询
    28         Student stu=(Student) session.get(Student.class, 1);
    29         System.out.println(stu.getId()+":"+stu.getName()+":"+stu.getNumber()
    30                             +":"+stu.getAge());
    31         transaction.commit();
    32         session.close();
    33         sessionFactory.close();
    34     }
    35 }

  • 相关阅读:
    新的知识点来了-ES6 Proxy代理 和 去银行存款有什么关系?
    JavaScript中一种全新的数据类型-symbol
    箭头函数的this指向问题-一看就懂
    ES6中对函数的扩展
    ES6中对象的扩展
    ES6中对数组的扩展
    ES6中对数值的扩展
    UWP --- Display Content 显示基础内容
    ViewBag & ViewData
    Bubble Sort冒泡排序
  • 原文地址:https://www.cnblogs.com/57rongjielong/p/8279079.html
Copyright © 2020-2023  润新知