Hibernate之一对多表关系的建立

两个实体类分别为Staff和Company,关系为一个Staff对应一个Company,一个Company对应多个Staff

Staff类

package com.maty.entity;

/**
 * @author maty e-mail:512181558@qq.com
 * @version 创建时间:2018年5月26日 下午1:40:30 类说明 该类为员工类,在一对多关系中的位置为多
 */
public class Staff
{
	// 员工工号
	private int sid;
	// 员工姓名
	private String sname;
	// 员工性别
	private String sex;

	// 在多中引入对应的一
	private Company company;

	public Company getCompany()
	{
		return company;
	}

	public void setCompany(Company company)
	{
		this.company = company;
	}

	public int getSid()
	{
		return sid;
	}

	public void setSid(int sid)
	{
		this.sid = sid;
	}

	public String getSname()
	{
		return sname;
	}

	public void setSname(String username)
	{
		this.sname = sname;
	}

	public String getSex()
	{
		return sex;
	}

	public void setSex(String sex)
	{
		this.sex = sex;
	}

}

Company类

package com.maty.entity;

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

/**
 * @author maty e-mail:512181558@qq.com
 * @version 创建时间:2018年5月27日 下午11:06:33 类说明 该类为公司类,在一对多关系中的位置为一
 */
public class Company
{
	// 公司id
	private int cid;
	// 公司名称
	private String cname;
	// 公司性质
	private String nature;

	// 在一中引入对应的多,Hibernate使用Set集合来存放多的对象
	Set<Staff> staffs = new HashSet<Staff>();

	public Set<Staff> getStaffs()
	{
		return staffs;
	}

	public void setStaffs(Set<Staff> staffs)
	{
		this.staffs = staffs;
	}

	public int getCid()
	{
		return cid;
	}

	public void setCid(int cid)
	{
		this.cid = cid;
	}

	public String getCname()
	{
		return cname;
	}

	public void setCname(String cname)
	{
		this.cname = cname;
	}

	public String getNature()
	{
		return nature;
	}

	public void setNature(String nature)
	{
		this.nature = nature;
	}

}

Staff.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入映射的约束条件,位于hibernate-core包中的org.hibernate.hibernate-configuration-3.0.dtd中 -->
<!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.maty.entity.Staff" table="t_staff">
		<!-- 设定实体类id与表的id -->
		<id name="sid" column="sid">
			<!-- 设定表中id的增长策略,使用native则表明根据数据库类型来决定主键生成策略 -->
			<generator class="native"></generator>
		</id>
		<!-- 设置其他属性的对应关系 -->
		<property name="sname" column="sname"></property>
		<property name="sex" column="sex"></property>
		<!-- 配置Staff类所对应的唯一Company
			name:表示在Staff类中的Company类名称 class:表示Company类的全路径 
			column:外键名称 -->
		<many-to-one name="company" class="com.maty.entity.Company"
			column="cid"></many-to-one>
	</class>
</hibernate-mapping>

Company.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入映射的约束条件,位于hibernate-core包中的org.hibernate.hibernate-configuration-3.0.dtd中 -->
<!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.maty.entity.Company" table="t_company">
		<!-- 设定实体类id与表的id -->
		<id name="cid" column="cid">
			<!-- 设定表中id的增长策略,使用native则表明根据数据库类型来决定主键生成策略 -->
			<generator class="native"></generator>
		</id>
		<!-- 设置其他属性的对应关系 -->
		<property name="cname" column="cname"></property>
		<property name="nature" column="nature"></property>
		<!-- 配置Company类所对应的多个Staff 
			name:Set集合的名称 
			column:外键名称(由于Hibernate采用双向维护外键,故需要在一和多两方面分别标志好外键) 
			class:表明该set集合中存放对象的位置 -->
		<set name="staffs">
			<key column="cid"></key>
			<one-to-many class="com.maty.entity.Staff" />
		</set>
	</class>
</hibernate-mapping>

Hibernate核心配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入Hibernate的核心配置文件的约束,该约束位于hibernate-core包中的org.hibernate.hibernate-configuration-3.0.dtd -->
<!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>
		<!-- 第一步:配置数据库信息 -->
		<!-- 配置数据库的方言 -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
		<!-- 配置数据库的驱动 -->
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<!-- 配置数据库的url -->
		<property name="hibernate.connection.url">jdbc:mysql://localhost/tx</property>
		<!-- 配置数据库的用户名 -->
		<property name="hibernate.connection.username">root</property>
		<!-- 配置数据库的密码 -->
		<property name="hibernate.connection.password">wangxiaowei</property>

		<!-- 第二步:配置Hibernate本身的设置 -->
		<!-- 是否在console显示sql语句 -->
		<property name="hibernate.show_sql">true</property>
		<!-- 是否对sql语句进行格式化 -->
		<property name="hibernate.format_sql">true</property>
		<!-- 是否自动建表 -->
		<property name="hibernate.hbm2ddl.auto">update</property>

		<!-- 第三步:加载hibernate mapping文件 -->
		<mapping resource="com/maty/entity/Company.hbm.xml" />
		<mapping resource="com/maty/entity/Staff.hbm.xml" />
	</session-factory>
</hibernate-configuration>

Utils类

package com.maty.Utils;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

/** 
* @author maty  e-mail:512181558@qq.com
* @version 创建时间:2018年5月27日 下午11:38:04 
* 类说明 该类为工具类,主要用来获取SessfionFactory
*/
public class HibernateUtils
{
	public static SessionFactory getSessionFactory()
	{
		Configuration cfg = new Configuration().configure();
		return cfg.buildSessionFactory();
	}
}
 

测试类

package com.maty.text;

import org.junit.Test;

import com.maty.Utils.HibernateUtils;

/** 
* @author maty  e-mail:512181558@qq.com
* @version 创建时间:2018年5月27日 下午11:40:02 
* 类说明 
*/
public class MyTest
{
	@Test
	public void test1()
	{
		HibernateUtils.getSessionFactory();
	}
}
 
测试结果符合预期
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值