美文网首页
hibernate的多表关联

hibernate的多表关联

作者: 大数据阶梯之路 | 来源:发表于2019-05-30 17:26 被阅读0次

话不多说,直接上代码示例

1、父表的POJO类InternationalClass.java

package com.international.model;

import java.util.Set;

public class InternationalClass {
    private int classId;
    private String className;
    private String grade;
    private String major;
    private String reserves1;
    private String reserves2;
    private String reserves3;
    
    private Set<InternationalStudent> interStudents;  //关联的对象
    
    public Set<InternationalStudent> getInterStudents() {
        return interStudents;
    }
    public void setInterStudents(Set<InternationalStudent> interStudents) {
        this.interStudents = interStudents;
    }
    public int getClassId() {
        return classId;
    }
    public void setClassId(int classId) {
        this.classId = classId;
    }
    public String getClassName() {
        return className;
    }
    public void setClassName(String className) {
        this.className = className;
    }
    public String getGrade() {
        return grade;
    }
    public void setGrade(String grade) {
        this.grade = grade;
    }
    public String getMajor() {
        return major;
    }
    public void setMajor(String major) {
        this.major = major;
    }
    public String getReserves1() {
        return reserves1;
    }
    public void setReserves1(String reserves1) {
        this.reserves1 = reserves1;
    }
    public String getReserves2() {
        return reserves2;
    }
    public void setReserves2(String reserves2) {
        this.reserves2 = reserves2;
    }
    public String getReserves3() {
        return reserves3;
    }
    public void setReserves3(String reserves3) {
        this.reserves3 = reserves3;
    }
}

2、父表的映射文件InternationalClass.hbm.xml

<?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="com.international.model.InternationalClass" table="InternationalClass">
        <id name="classId" column="classId">
            <!-- 自增主键策略 -->
            <generator class="native"></generator>
        </id>
        <property name="className" column="className"></property>
        <property name="grade" column="grade"></property>
        <property name="major" column="major"></property>

        <property name="reserves1" column="reserves1"></property>
        <property name="reserves2" column="reserves2"></property>
        <property name="reserves3" column="reserves3"></property>

        <!-- 关联的国际班学生对象 -->
        <set name="interStudents" cascade="all" table="internationalStudent" inverse="true">
            <key column="classId" not-null="true"></key>
            <one-to-many class="com.international.model.InternationalStudent"/>
        </set>
    </class>
</hibernate-mapping>

3、子表的POJO类InternationalStudent.java

package com.international.model;

public class InternationalStudent {
    private String studentId;
    private String studentName;
    private String sex;
    private String password; 
    private String status;
    private String reserves1;
    private String reserves2;
    private String reserves3;
    
    private InternationalClass classes;     //定义InternationalClass类的classes对象

    public String getStudentId() {
        return studentId;
    }
    public void setStudentId(String studentId) {
        this.studentId = studentId;
    }
    public String getStudentName() {
        return studentName;
    }
    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    public String getReserves1() {
        return reserves1;
    }
    public void setReserves1(String reserves1) {
        this.reserves1 = reserves1;
    }
    public String getReserves2() {
        return reserves2;
    }
    public void setReserves2(String reserves2) {
        this.reserves2 = reserves2;
    }
    public String getReserves3() {
        return reserves3;
    }
    public void setReserves3(String reserves3) {
        this.reserves3 = reserves3;
    }
    public InternationalClass getClasses() {
        return classes;
    }
    public void setClasses(InternationalClass classes) {
        this.classes = classes;
    }
}

4、子表的映射文件InterantionalStudent.hbm.xml

<?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="com.international.model.InternationalStudent" table="InternationalStudent">
        <id name="studentId" column="studentId">
            <!-- 非自增主键生成策略 -->
            <generator class="assigned"></generator>
        </id>
        <property name="studentName" column="studentName"></property>
        <property name="sex" column="sex"></property>
        <property name="password" column="password"></property>
        <property name="status" column="status"></property>
        <!-- <property name="classId" column="classId"></property> -->
        
        <!-- 双向n->1关联,外键,由InternationalStudent指向InternationalClass -->
        <many-to-one name="classes" class="com.international.model.InternationalClass" 
        lazy="false" fetch="join" column="classId" />
    </class>
</hibernate-mapping>

分析,上面就是两张表关联起来的映射文件和POJO类了,没贴业务代码。注意里面起关联的部分,还有cascade=“all”这个属性,我曾在父子表都设置过,然后子表执行删除操作的时候,悲剧来了,级联操作把父表对应的班级信息给我删了。。。所以导致子表的学生信息也对应没了。所以要想做到删除学生信息不影响班级信息,删除班级信息会影响学生信息,此时在子表的cascade级联属性就得设置成cascade="none"或者不写默认就是none。

相关文章

  • hibernate的多表关联

    话不多说,直接上代码示例 1、父表的POJO类InternationalClass.java 2、父表的映射文件I...

  • hibernate二

    layout: posttitle: hibernate--多表subtitle: 多表操作...

  • python面试题01

    1、什么是多表关联查询,有几种多表关联的查询方式,分别是什么? 多表关联查询概念: 多表关联查询分类:1.1内连接...

  • mysql实现多表关联

    mysql实现多表关联 mysql关联单张表

  • Mysql 一些实用方法笔记!

    sql 注入: sql 导入数据: 批量插入数据: sql 关联更新多表数据: sql 关联删除多表数据: mys...

  • 2018-09-21数据库&多表关联&增删改&a

    数据库&多表关联&增删改&数据库备份 多表关联 两表关联,必须有一个关联字段 关联方法 where(原理) 第一步...

  • Hibernate(3.2)_Hibernate多表的操作

    简介 我们都已经知道了Hibernate对于单表单记录的基本操作了,但是我们知道,在这个世界上,事物与事物之间是有...

  • hibernate多表关系

    一对一主键:单向和双向 一. 单向一对一主键(一个对象中存在另一个对象的引用,只能从一个对象找另一个对象,不能反过...

  • Hibernate 的多表关系

    hibernate表关联的各种配置: 1、多对多单向: user----->role user.hbm.xml: ...

  • Hibernate的多表操作

    以前我们都是通过sql语句连关联两个或多个表。 表之间的关系(实体之间的关系): 一对一 一对多 在多的一方创建指...

网友评论

      本文标题:hibernate的多表关联

      本文链接:https://www.haomeiwen.com/subject/cqnvtctx.html