zoukankan      html  css  js  c++  java
  • JPA继承-连接策略

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

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

    @Inheritance(strategy=InheritanceType.JOINED)
    
    Java

    连接策略示例

    在这个例子中,我们将员工分为活跃员工和退休员工。

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

    现在,按照以下步骤创建JPA项目 -

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

    文件:Employee.java -

    package com.yiibai.jpa.inheritence;
    
    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;
        }
    
        public Employee() {
            super();
    
        }
    
        public int getE_id() {
            return e_id;
        }
    
        public void setE_id(int e_id) {
            this.e_id = e_id;
        }
    
        public String getE_name() {
            return e_name;
        }
    
        public void setE_name(String e_name) {
            this.e_name = e_name;
        }
    
    }
    
    Java

    第2步:com.yiibai.jpa.inheritence包下创建实体类ActiveEmployee.java(它是Employee类的子类)。

    文件:ActiveEmployee.java -

    package com.yiibai.jpa.inheritence;
    
    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;
        }
    
        public ActiveEmployee() {
            super();
    
        }
    
        public int getE_salary() {
            return e_salary;
        }
    
        public void setE_salary(int e_salary) {
            this.e_salary = e_salary;
        }
    
        public int getE_experience() {
            return e_experience;
        }
    
        public void setE_experience(int e_experience) {
            this.e_experience = e_experience;
        }
    
    }
    
    Java

    第3步:com.yiibai.jpa.inheritence包下创建另一个实体类RetiredEmployee.java(它是Employee.java的子类)。

    文件:RetiredEmployee.java -

    package com.yiibai.jpa.inheritence;
    
    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;
        }
    
        public RetiredEmployee() {
            super();
    
        }
    
        public int getE_pension() {
            return e_pension;
        }
    
        public void setE_pension(int e_pension) {
            this.e_pension = e_pension;
        }
    
    }
    
    Java

    第4步: 将实体类和其他数据库配置映射到Persistence.xml文件中。
    persistence.xml

    文件:persistence.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>
    
    XML

    第5步:com.yiibai.jpa.persistence包下创建持久性类EmployeePersistence.java。 这个类用于初始化一个对象并保存它。

    文件: EmployeePersistence.java -

    package com.yiibai.jpa.persistence;
    
    import javax.persistence.*;
    import com.yiibai.jpa.inheritence.*;
    
    public class EmployeePersistence {
    
        public static void main(String[] args) {
    
            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();
    
        }
    }
    
    Java

    执行程序后,在MySQL数据库中运行select * from employee_details查询,将会得到以下输出结果 -

    mysql> select * from employee_details;
    +------+-----------------+--------+
    | E_ID | DTYPE           | E_NAME |
    +------+-----------------+--------+
    |  101 | ActiveEmployee  | 李小云 |
    |  102 | ActiveEmployee  | 张峰   |
    |  104 | RetiredEmployee | 叶问顶 |
    |  103 | RetiredEmployee | 王四哥 |
    +------+-----------------+--------+
    4 rows in set
    
    Shell

    查询activeemployee表,执行 Select * from activeemployee -

    mysql> Select * from activeemployee;
    +------+--------------+----------+
    | E_ID | E_EXPERIENCE | E_SALARY |
    +------+--------------+----------+
    |  101 |            5 |    10000 |
    |  102 |            7 |    12000 |
    +------+--------------+----------+
    2 rows in set
    
    SQL

    查询retired_employee表,执行 Select * from retired_employee -

    mysql> Select * from retiredemployee;
    +------+-----------+
    | E_ID | E_PENSION |
    +------+-----------+
    |  104 |      4000 |
    |  103 |      5000 |
    +------+-----------+
    2 rows in set
  • 相关阅读:
    Codeforces 1316B String Modification
    Codeforces 1305C Kuroni and Impossible Calculation
    Codeforces 1305B Kuroni and Simple Strings
    Codeforces 1321D Navigation System
    Codeforces 1321C Remove Adjacent
    Codeforces 1321B Journey Planning
    Operating systems Chapter 6
    Operating systems Chapter 5
    Abandoned country HDU
    Computer HDU
  • 原文地址:https://www.cnblogs.com/borter/p/12424020.html
Copyright © 2011-2022 走看看