`
KuangYeYaZi
  • 浏览: 52990 次
文章分类
社区版块
存档分类
最新评论

Hibernate一对多关联

阅读更多

一对多的配置思想是:在一的一方用一个Set集合来装多的对象。跟上一篇多对一的思想是不同的,多对一的思想是:在多的一方设置一的对象作为属性。

还是以学生和班级为例。这里因为是要配置一对多,所以班级类的文件改成如下:

package com.ye.models;

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

/**
 * 类功能简单描述:这个是单向的多对一映射<BR/>
 * 类名:Class<BR/>
 * 作者yenairong<BR/>
 * 时间:2014年11月17日 下午1:00:17<BR/>
 * @version 1.0.0 <BR/>
 */
public class Class {
	private int classId;
	private String className;
	
	//在这里设置学生类用一个Set集合来装,就完成了一对多配置。new一个的
       //原因是防止应用程序取值时,出现空指向异常
	private Set<Student> stuSet = new HashSet<Student>();
	
	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 Set<Student> getStuSet() {
		return stuSet;
	}
	public void setStuSet(Set<Student> stuSet) {
		this.stuSet = stuSet;
	}
}

 在学生类那里是这样子配置的:

 

package com.ye.models;

public class Student {
	private int stuId;
	private String studName;
	public int getStuId() {
		return stuId;
	}
	public void setStuId(int stuId) {
		this.stuId = stuId;
	}
	public String getStudName() {
		return studName;
	}
	public void setStudName(String studName) {
		this.studName = studName;
	}	
}

 接下来配置班级Class和学生Student类的的映射文件:

班级类的映射文件是如下配置的(因为为有直接one - to - many-配置的标签,所以得改用一个Set标签来实现):

班级类的映射文件如下的形式:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2014-11-16 18:45:07 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
	<class name="com.ye.models.Class" table="c_table">
		<id name="classId" type="int">
			<column name="class_id" />
			<generator class="native">
			</generator>
		</id>
		<property name="className" type="java.lang.String">
			<column name="class_name" />
		</property>
<!--  set里面name对应于本实体类里面的Set集合的实例名。inverse和lazy暂时不用设。它们默认是inverse="false" lazy="true" -->
		<set name="stuSet">
			<key column="stu_id"></key><!-- 这里指定引用的外键名跟表里面的一样,key -->
			<one-to-many class="com.ye.models" ></one-to-many>
		</set>
	</class>
</hibernate-mapping>

 学生类的映射文件是这样配置的:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.ye.models.Student" table="student">
        <id name="stuId" type="int">
            <column name="stuid" />
            <generator class="native" />
        </id>
        <property name="studName" type="java.lang.String">
            <column name="STUDNAME" />
        </property>
    </class>
</hibernate-mapping>

 

最后是配置hibernat.cfg.xml这个文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
		"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
		"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.password">123456</property>
        <property name="hibernate.connection.url">jdbc:mysql:///test</property>
        <property name="hibernate.connection.username">root</property>
        <!-- 数据库方言 -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
     
        <!--  是否显示sql语句 -->
        <property name="show_sql">true</property>
        
        <!-- 是否自动生成表结构,它有四个属性,一般常用的就是update -->
        <property name="hbm2ddl.auto">update</property>
        
        <!-- 映射文件 -->
        <mapping resource="com/ye/models/Class.hbm.xml"/>
        <mapping resource="com/ye/models/Student.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

 附件的内容是直接可以运行的代码

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics