zoukankan      html  css  js  c++  java
  • JPA一对多映射

    一对多映射进入集合值关联的类别,其中实体与其他实体的集合关联。 因此,在这种类型的关联中,一个实体的实例可以映射到另一个实体的任意数量的实例。

    完整的项目目录结构如下所示 -

    @OneToMany 示例

    在这个例子中,我们将创建一个学生和图书库之间的一对多系,这样一个学生能发放多种类型的图书。

    这个例子包含以下步骤 -

    第1步:com.javatpoint.mapping包下创建一个实体类Student.java,它包含学生ID(s_id),学生姓名(s_name),其中包含包含List类型的Library类对象的@OneToMany注释。

    文件:Student.java 的代码如下所示 -

    package com.yiibai.mapping;
    
    import java.util.List;
    
    import javax.persistence.*;
    
    @Entity
    public class Student {
    
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private int s_id;
        private String s_name;
    
        @OneToMany(targetEntity = Library.class)
        private List books_issued;
    
        public List getBooks_issued() {
            return books_issued;
        }
    
        public void setBooks_issued(List books_issued) {
            this.books_issued = books_issued;
        }
    
        public int getS_id() {
            return s_id;
        }
    
        public void setS_id(int s_id) {
            this.s_id = s_id;
        }
    
        public String getS_name() {
            return s_name;
        }
    
        public void setS_name(String s_name) {
            this.s_name = s_name;
        }
    
    }
    
    Java

    第2步:com.yiibai.mapping包下创建另一个实体类Library.java,其中包含book id(b_id),book name(b_name)以及标记有@OneToMany注释的学生类型对象。

    文件:Library.java 的代码如下所示 -

    package com.yiibai.mapping;
    
    import javax.persistence.*;
    
    @Entity
    public class Library {
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private int b_id;
        private String b_name;
    
        public Library(int b_id, String b_name) {
            super();
            this.b_id = b_id;
            this.b_name = b_name;
    
        }
    
        public Library() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        public int getB_id() {
            return b_id;
        }
    
        public void setB_id(int b_id) {
            this.b_id = b_id;
        }
    
        public String getB_name() {
            return b_name;
        }
    
        public void setB_name(String b_name) {
            this.b_name = b_name;
        }
    
    }
    
    Java

    第3步: 将实体类和其他数据库配置映射到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="book_issued">
            <class>com.yiibai.mapping.Student</class>
            <class>com.yiibai.mapping.Library</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" />
                <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

    com.yiibai.onetoone包下创建一个持久化类OneToManyExample,用于将实体对象与数据保持一致。

    文件:OneToManyExample.java 的代码如下所示 -

    package com.yiibai.mapping;
    
    import java.util.ArrayList;
    
    import javax.persistence.*;
    
    import com.yiibai.mapping.Student;
    import com.yiibai.mapping.Library;
    
    public class OneToManyExample {
    
        public static void main(String[] args) {
    
            EntityManagerFactory emf = Persistence.createEntityManagerFactory("books_issued");
            EntityManager em = emf.createEntityManager();
    
            em.getTransaction().begin();
    
            Library lib1 = new Library();
            lib1.setB_id(101);
            lib1.setB_name("Data Structure");
    
            Library lib2 = new Library();
            lib2.setB_id(102);
            lib2.setB_name("DBMS");
    
            em.persist(lib1);
            em.persist(lib2);
    
            ArrayList<Library> list = new ArrayList<Library>();
            list.add(lib1);
            list.add(lib2);
    
            Student st1 = new Student();
            st1.setS_id(1);
            st1.setS_name("Maxsu");
            st1.setBooks_issued(list);
    
            em.persist(st1);
    
            em.getTransaction().commit();
            em.close();
            emf.close();
    
        }
    
    }
    
    Java

    程序输出结果

    程序执行完成后,下面的表格在MySQL工作台下生成。

    • Student表 - 此表包含学生详细信息。要获取数据,请在MySQL中运行select * from student查询。结果如下所示 -
    mysql> select * from student;
    +------+--------+
    | S_ID | S_NAME |
    +------+--------+
    |    1 | Maxsu  |
    +------+--------+
    1 row in set
    
    Shell
    • Library表 - 这个表格代表学生和图书库之间的映射。 要获取数据,请在MySQL中运行select * from library查询。结果如下所示 -
    mysql> select * from library;
    +------+----------------+
    | B_ID | B_NAME         |
    +------+----------------+
    |  102 | DBMS           |
    |  101 | Data Structure |
    +------+----------------+
    2 rows in set
    
    Shell
    • Student_library表 - 该表表示学生和图书库表之间的映射。 要获取数据,请在MySQL中运行select * from student_library查询。
    mysql> select * from student_library;
    +--------------+-------------------+
    | Student_S_ID | books_issued_B_ID |
    +--------------+-------------------+
    |            1 |               101 |
    |            1 |               102 |
    +--------------+-------------------+
    2 rows in set
  • 相关阅读:
    Grandpa's Estate
    The Fortified Forest
    Scrambled Polygon
    Wall
    激情的大三
    无聊的大二
    美好的大一
    高精度 加减乘
    Erasing Edges
    git放弃修改&放弃增加文件
  • 原文地址:https://www.cnblogs.com/borter/p/12423959.html
Copyright © 2011-2022 走看看