博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate关系映射(三) 多对一和一对多
阅读量:5243 次
发布时间:2019-06-14

本文共 3345 字,大约阅读时间需要 11 分钟。

一、多对一

学生Student和班级Grade实现多对一,多个学生对应一个班级。

Student.java实体类,映射了班级的属性。

package com.lxit.entity;
import java.io.Serializable;
public class Student implements Serializable {
    
    public Student() {
    }
    public Student(String sname, String sex, String address) {
        this.sname = sname;
        this.sex = sex;
        this.address = address;
    }
    public Student(String sname, String sex, String address, Grade grade) {
        this.sname = sname;
        this.sex = sex;
        this.address = address;
        this.grade = grade;
    }
    private int sid;
    private String sname;
    private String sex;
    private String address;
    
    //单向多对一:在多的一方封装一的一方的实体对象
    private Grade grade;
    
    public int getSid() {
        return sid;
    }
    public void setSid(int sid) {
        this.sid = sid;
    }
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public Grade getGrade() {
        return grade;
    }
    public void setGrade(Grade grade) {
        this.grade = grade;
    }
    @Override
    public String toString() {
        return "Student [sid=" + sid + ", sname=" + sname + ", sex=" + sex
                + ", address=" + address + "]";
    }

 

Student.hbm.xml 学生映射文件,添加了和班级的多对一关系 

<?xml version="1.0"?>
<!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.lxit.entity.Student" table="Student">
         <id name="sid" column="sid">
             <generator class="native"></generator>
         </id>
         <property name="sname" column="sname" type="java.lang.String"></property>
         <property name="sex" column="sex"></property>
         <property name="address" column="address"></property>
         <!-- 实现多对一的映射关系 -->
         <many-to-one name="grade" class="com.lxit.entity.Grade" column="gid" lazy="false"></many-to-one>
     </class>

</hibernate-mapping> 

 

 

二、一对多 

Grade.java实体类,映射了班级和学生的一对多,包含了学生的集合。 

package com.lxit.entity;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
public class Grade implements Serializable{
    
    public Grade() {
    }
    
    public Grade(String gname) {
        this.gname = gname;
    }
    
    //在一方添加多方的集合
    public Set<Student> students = new HashSet<Student>();
    private int gid;
    private String gname;
    
    public int getGid() {
        return gid;
    }
    public void setGid(int gid) {
        this.gid = gid;
    }
    public String getGname() {
        return gname;
    }
    public void setGname(String gname) {
        this.gname = gname;
    }
    public Set<Student> getStudents() {
        return students;
    }
    public void setStudents(Set<Student> students) {
        this.students = students;
    } 

 

Grade映射文件 

<?xml version="1.0"?>
<!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.lxit.entity.Grade" table="Grade">
         <id name="gid" column="gid">
             <generator class="native"></generator>
         </id>
         <property name="gname" type="java.lang.String">
             <column name="gname" length="20"></column>
         </property>
         <!-- 
             inverse:表示将维护外键的职责交友多方来维护,默认为false
             cascade:表示级联效果,当保存班级时,班级对应的学生一起保存
         -->
         <set name="students" table="Student" cascade="all">
             <key column="gid"></key>
             <one-to-many class="com.lxit.entity.Student"/>
         </set>
     </class>

</hibernate-mapping> 

转载于:https://www.cnblogs.com/Jeely/p/11226179.html

你可能感兴趣的文章
PS 滤镜— — sparkle 效果
查看>>
snmpwalk命令常用方法总结
查看>>
网站产品设计
查看>>
代理ARP
查看>>
go 学习笔记(4) ---项目结构
查看>>
java中静态代码块的用法 static用法详解
查看>>
Java线程面试题
查看>>
Paper Reading: Relation Networks for Object Detection
查看>>
day22 01 初识面向对象----简单的人狗大战小游戏
查看>>
mybatis源代码分析:深入了解mybatis延迟加载机制
查看>>
Flask三剑客
查看>>
Hibernate-缓存
查看>>
【BZOJ4516】生成魔咒(后缀自动机)
查看>>
提高PHP性能的10条建议
查看>>
svn“Previous operation has not finished; run 'cleanup' if it was interrupted“报错的解决方法...
查看>>
熟用TableView
查看>>
Java大数——a^b + b^a
查看>>
poj 3164 最小树形图(朱刘算法)
查看>>
服务器内存泄露 , 重启后恢复问题解决方案
查看>>
android一些细节问题
查看>>