hibernate之 many to one /one to many

一个classroom 对应多个学生.这个是one to many

多个学生对应一个classroom 这个是many to one

表classroom

| classroom | CREATE TABLE `classroom` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

表 student

| student | CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `classroom` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `FK_ID` (`classroom`),
  CONSTRAINT `FK_ID` FOREIGN KEY (`classroom`) REFERENCES `classroom` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

classroom 的主键是student 的外键.

用hibernate 自动生成如下的类和hbm.xml 映射文件

classroom.java

package com.skyline.test;
// Generated 2015-10-15 15:15:05 by Hibernate Tools 4.3.1

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

/**
 * Classroom generated by hbm2java
 */
public class Classroom implements java.io.Serializable {

    private Integer id;
    private String name;
    private Set students = new HashSet(0); //表中没有

   ......getter/setter
}

student.java

package com.skyline.sms.caster.test;
// Generated 2015-10-15 15:15:05 by Hibernate Tools 4.3.1

/**
 * Student generated by hbm2java
 */
public class Student implements java.io.Serializable {

    private Integer id;
    private Classroom classroom;
    private String name;

............getter/setter

}

classroom.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">
<!-- Generated 2015-10-15 15:15:06 by Hibernate Tools 4.3.1 -->
<hibernate-mapping>
    <class name="Classroom" table="classroom" catalog="smsdb" optimistic-lock="version">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="identity" />
        </id>
        <property name="name" type="string">
            <column name="name" length="20" />
        </property>
        <set name="students" table="student" inverse="true" lazy="true" fetch="select">
            <key>  <!--key 表示在student 表有如下外键-->
                <column name="classroom" />
            </key>
            <one-to-many class="Student" />
        </set>
    </class>
</hibernate-mapping>

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">
<!-- Generated 2015-10-15 15:15:06 by Hibernate Tools 4.3.1 -->
<hibernate-mapping>
    <class name="Student" table="student" catalog="smsdb" optimistic-lock="version">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="identity" />
        </id>
         <property name="name" type="string">
            <column name="name" length="20" />
        </property>
        <many-to-one name="classroom" class="Classroom" fetch="select">
            <column name="classroom" />
        </many-to-one>
    </class>
</hibernate-mapping>
原文地址:https://www.cnblogs.com/predisw/p/4882562.html