hibernate 一对多(级联关系)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hibernate 一对多(级联关系)相关的知识,希望对你有一定的参考价值。

hibernate 核心配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
        
<hibernate-configuration>
    
    <session-factory>
        <!-- DataSource配置 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/test</property>
        <property name="connection.username">root</property>
        <property name="connection.password"></property>
        
        <!-- 指定连接数据库所使用的SQL方言-->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- 控制台是否输出SQL语句 -->
        <property name="show_sql">true</property>
        <!-- 式化Hibernate的SQL输出语句 -->
        <property name="hibernate.format_sql">true</property>
        <!-- 指定程序是否在数据库自动创建表 -->
        <property name="hbm2ddl.auto">update</property>
        <!-- 指定映射文件的路径 -->
        <mapping resource="zr/com/pojo/TeamClass.hbm.xml"/>
        <mapping resource="zr/com/pojo/Student.hbm.xml"/>
    </session-factory>

</hibernate-configuration>

实体类的映射关系

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="zr.com.pojo">
    <!-- 配置映射关系 -->
    <class name="TeamClass" table="team_class">
        <!-- 配置主键和对应主键的属性 -->
        <id name="classID" column="class_id">
            <generator class="native"/>
        </id>
        <!-- 配置属性和相对应数据的列 -->
        <property name="lfname" column="class_name"/>
        <!-- 集合 
            cascade="all" 级联关系
            inverse="true" 放弃管理外键
        -->
        <set name="students" table="student" cascade="all" inverse="true">
            <!-- 外键 -->
            <key column="class_id"/>
            <!-- 一对多 -->
            <one-to-many class="zr.com.pojo.Student"/>
        </set>
    </class>

</hibernate-mapping>     
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping>
     
     <!-- 映射关系 -->
     <class name="zr.com.pojo.Student" table="student">
         <id name="id" column="stu_id">
             <!-- 生成主键id的方式 -->
            <generator class="native"/>
         </id>
         <property name="name" column="stu_name"/>
         <!-- <property name="classId" column="class_id"/> -->
         
         <many-to-one name="teamClass" class="zr.com.pojo.TeamClass" column="class_id" cascade="all"/>
         
     </class>

</hibernate-mapping>
package zr.com.pojo;

public class Student {
    
    private int id;
    private String name;
    
    private TeamClass teamClass;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public TeamClass getTeamClass() {
        return teamClass;
    }

    public void setTeamClass(TeamClass teamClass) {
        this.teamClass = teamClass;
    }

    public Student() {
        super();
    }

    public Student(int id, String name, TeamClass teamClass) {
        super();
        this.id = id;
        this.name = name;
        this.teamClass = teamClass;
    }

    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + ", teamClass="
                + teamClass + "]";
    }
    
    
    
    
    
    

}
package zr.com.pojo;

import java.util.HashSet;
import java.util.Set;

public class TeamClass {
    
    private int classID;
    
    private String lfname;
    
    private Set<Student> students = new HashSet<Student>();

    public int getClassID() {
        return classID;
    }

    public void setClassID(int classID) {
        this.classID = classID;
    }

    public String getLfname() {
        return lfname;
    }

    public void setLfname(String lfname) {
        this.lfname = lfname;
    }

    public Set<Student> getStudents() {
        return students;
    }

    public void setStudents(Set<Student> students) {
        this.students = students;
    }

    public TeamClass() {
        super();
    }

    public TeamClass(int classID, String lfname, Set<Student> students) {
        super();
        this.classID = classID;
        this.lfname = lfname;
        this.students = students;
    }

    @Override
    public String toString() {
        return "TeamClass [classID=" + classID + ", lfname=" + lfname
                + ", students=" + students + "]";
    }


}
package zr.com.test;

import java.util.List;
import java.util.UUID;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

import zr.com.pojo.Student;
import zr.com.pojo.TeamClass;


public class TestClass {
    
    public static void main(String[] args) {
        
        // 创建Configuration 对象
        Configuration configuration = new Configuration().configure("hibernate.cfg.xml");
        // 创建ServiceRegistry 对象
        ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
        // 创建SessionFactory 对象
        SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
        // 创建Session 对象
        Session session = sessionFactory.openSession();
        
        // 开启事务
        session.beginTransaction();
        // 创建实体类
        Student student1= new Student();
        student1.setName("lf");
        Student student2= new Student();
        student2.setName("gl");
        
        TeamClass teamClass = new TeamClass();
        teamClass.setLfname("java");
        teamClass.getStudents().add(student1);
        teamClass.getStudents().add(student2);
        // 插入数据
        session.save(teamClass);
        
        // 提交事务
        session.getTransaction().commit();
        
    
    }
}

 

以上是关于hibernate 一对多(级联关系)的主要内容,如果未能解决你的问题,请参考以下文章

hibernate 一对多(级联关系)

三大框架 之 Hibernate查询(一对多多对多查询关系)

hibernate之一对多,多对一

2018.11.4 Hibernate中多对多的关系

hibernate一对多单向关联时更新问题

JPA+Hibernate - 实体关系中的循环 - 级联策略