JPA(Java Persistence API)学习十八(连接策略)

1.概述

    在连接策略中,为每个实体类生成一个单独的表。 每个表的属性都与主键连接。 它消除了字段字重复的可能性。

    以下语法表示连接的策略: -

 @Inheritance(strategy=InheritanceType.JOINED)

2.连接策略示例
   描述:在这个例子中,我们将员工分为活跃员工和退休员工。

              因此,子类ActiveEmployeesRetiredEmployees继承父类Employeee_ide_name字段。

   第一步:创建一个根实体类Employee.java并指定所有必需的属性和注释。

            import java.io.Serializable;
            import javax.persistence.*;
            @Entity
            @Table(name = "employee_details")
            @Inheritance(strategy=InheritanceType.JOINED)
            public class Employee implements Serializable {
                   @Id
                   private int e_id;
                   private String e_name;
                   public Employee(int e_id, String e_name) {
                          super();
                          this.e_id = e_id;
                           this.e_name = e_name;
                   }
             }
      第二步:包下创建实体类ActiveEmployee.java(它是Employee类的子类)。
             import javax.persistence.*;
             @Entity
             public class ActiveEmployee extends Employee {
                   private int e_salary;
                   private int e_experience;
                   public ActiveEmployee(int e_id, String e_name, int e_salary, int e_experience) {
                            super(e_id, e_name);
                            this.e_salary = e_salary;
                            this.e_experience = e_experience;
                    }
                }
        第三步:创建另一个实体类RetiredEmployee.java(它是Employee.java的子类)。
                 import javax.persistence.*;
                @Entity
                public class RetiredEmployee extends Employee {
                      private int e_pension;
                      public RetiredEmployee(int e_id, String e_name, int e_pension) {
                          super(e_id, e_name);
                          this.e_pension = e_pension;
                       }
                 }
         第四步:xml                
           <?xml version="1.0" encoding="UTF-8"?>
           <persistence version="2.1"
                  xmlns="http://xmlns.jcp.org/xml/ns/persistence"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
                             http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
                  <persistence-unit name="Employee_details">
                        <class>com.yiibai.jpa.inheritence.ActiveEmployee</class>
                        <class>com.yiibai.jpa.inheritence.RetiredEmployee</class>
                        <class>com.yiibai.jpa.inheritence.Employee</class>
                       <properties>
                         <property name="javax.persistence.jdbc.driver"
                              value="com.mysql.jdbc.Driver" />
                        <property name="javax.persistence.jdbc.url"
                              value="jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC&characterEncoding=utf8" />
                       <property name="javax.persistence.jdbc.user" value="root" />
                       <property name="javax.persistence.jdbc.password"
                             value="123456" />
                       <property name="eclipselink.logging.level" value="SEVERE" />
                      <property name="eclipselink.ddl-generation"
                           value="create-or-extend-tables" />
                   </properties>
               </persistence-unit>
          </persistence>
         第五步:执行
                 EntityManagerFactory emf = Persistence.createEntityManagerFactory("Employee_details");
                 EntityManager em = emf.createEntityManager();
                 em.getTransaction().begin();
                  ActiveEmployee ae1 = new ActiveEmployee(101, "李小云", 10000, 5);
                  ActiveEmployee ae2 = new ActiveEmployee(102, "张峰", 12000, 7);
                  RetiredEmployee re1 = new RetiredEmployee(103, "王四哥", 5000);
                  RetiredEmployee re2 = new RetiredEmployee(104, "叶问顶", 4000);
                  em.persist(ae1);
                  em.persist(ae2);
                  em.persist(re1);
                  em.persist(re2);
                  em.getTransaction().commit();
                  em.close();
                  emf.close();
           第六步:结果
                  

 

                 

 

                

 

 

学习来源:https://www.yiibai.com/jpa/jpa-joined-strategy.html#article-start

 
posted @ 2020-09-09 17:26  小窝蜗  阅读(228)  评论(0)    收藏  举报