基于外键映射的 一对一关系

一.

二.代码实现

1.Department

package cn.edu.sdut.hibernate.onetoone;


public class Department {

	private  int deId;
	private String deName;
	private Manager mgr;
	public int getDeId() {
		return deId;
	}
	public void setDeId(int deId) {
		this.deId = deId;
	}
	public String getDeName() {
		return deName;
	}
	public void setDeName(String deName) {
		this.deName = deName;
	}
	public Manager getMgr() {
		return mgr;
	}
	public void setMgr(Manager mgr) {
		this.mgr = mgr;
	}
	
	
	
}

2. Manager
package cn.edu.sdut.hibernate.onetoone;


public class Manager {

	private int maId;
	private String mName;
	private Department department;
	public int getMaId() {
		return maId;
	}
	public void setMaId(int maId) {
		this.maId = maId;
	}
	public String getmName() {
		return mName;
	}
	public void setmName(String mName) {
		this.mName = mName;
	}
	public Department getDepartment() {
		return department;
	}
	public void setDepartment(Department department) {
		this.department = department;
	}
	
	
}
3.Department.hbm.xml

<?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 2016-10-30 14:28:39 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
    <class name="cn.edu.sdut.hibernate.onetoone.Department" table="DEPARTMENTS">
        <id name="deId" type="int">
            <column name="DE_ID" />
            <generator class="native" />
        </id>
        <property name="deName" type="java.lang.String">
            <column name="DE_NAME" />
        </property>
        <many-to-one name="mgr" class="cn.edu.sdut.hibernate.onetoone.Manager">
        	<column name="MA_ID" unique="true"></column>
        </many-to-one>
    </class>
</hibernate-mapping>

4.Manager.hbm.xml
<?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 2016-10-30 14:28:39 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
    <class name="cn.edu.sdut.hibernate.onetoone.Manager" table="MANAGERS">
        <id name="maId" type="int">
            <column name="MA_ID" />
            <generator class="native" />
        </id>
        <property name="mName" type="java.lang.String">
            <column name="M_NAME" />
        </property>
        <one-to-one name="department" class="cn.edu.sdut.hibernate.onetoone.Department" 
        			property-ref="mgr"></one-to-one>
    </class>
</hibernate-mapping>
5.DoubleOneToOneTest

package cn.edu.sdut.hibernate.onetoone;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;


public class DoubleOneToOneTest {

	private SessionFactory sessionFactory;
	private Session session;
	private Transaction transaction;
	
	@Before
	public void init(){
		Configuration configuration = new Configuration().configure();
		ServiceRegistry serviceRegistry = 
				new ServiceRegistryBuilder().applySettings(configuration.getProperties())
											.buildServiceRegistry();
		sessionFactory = configuration.buildSessionFactory(serviceRegistry);
		session = sessionFactory.openSession();
		transaction = session.beginTransaction();
	}
	@After
	public void destory(){
		transaction.commit();
		session.close();
		sessionFactory.close();
	}
	
	@Test
	public void testSave(){
		Manager manager = new Manager();
		manager.setmName("csc");
		Department department = new Department();
		department.setDeName("AA");
		department.setMgr(manager);
		manager.setDepartment(department);
		//保存的时候先保存1to1的,后保存nto1(设置为unique = true),效率高
		session.save(manager);
		session.save(department);
	
	}
	
	@Test
	public void testGet(){
		//get获取的时候不会出现懒加载异常,因为在得到manger的时候会把所有的信息加载出来
		Manager manager = (Manager) session.get(Manager.class, 1);
		System.out.println(manager.getDepartment().getClass().getName());
	}
	
	@Test
	public void testDelete(){
		//再不设置联级关系的时候不能联级删除
		Manager manager = (Manager) session.get(Manager.class, 2);
//		Department department = (Department) session.get(Department.class, 1);
//		session.delete(department);
		session.delete(manager);
	}
}
6、hibernate.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="connection.username">root</property>
    	<property name="connection.password">csc</property>
    	<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    	<property name="connection.url">jdbc:mysql:///hibernate5</property>
    
    	<!-- 配置hibernate的基本信息 -->
    	<!-- hibernate 所使用的数据库方言 -->
    	<property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
    	
    	<!-- 执行sql时是否在控制台上打印 -->
    	<property name="show_sql">true</property>
    	
    	<!-- 是否对sql进行格式化 -->
    	<property name="format_sql">true</property>
    	
    	<!-- 指定自动生成数据表的策略 -->
    	<property name="hbm2ddl.auto">update</property>
    	
    	<!-- 指定session的delete方法会把对象的id置为null -->
    	<property name="hibernate.use_identifier_rollback">true</property>
    	
    	<!-- 指定数据库的隔离级别 -->
    	<property name="connection.isolation">2</property>
    	
    	<!-- 配置c3p0数据池 -->
    	<property name="hibernate.c3p0.max_size">100</property>
    	<property name="hibernate.c3p0.min_size">20</property>
    	<property name="hibernate.c3p0.acquire_increment">5</property>
    	<property name="hibernate.c3p0.timeout">2000</property>
    	<property name="hibernate.c3p0.idle_test_period">2000</property>
    	<property name="hibernate.c3p0.max_statements">10</property>
    	
    	<!-- 设定JDBC的statment读取数据的时候每次在数据库中读取的记录的条数 -->
    	<property name="hibernate.jdbc.fetch_size">100</property>
    	<!-- 设定对数据进行批量操作,批次更新和批次插入的批次大小 -->
    	<property name="hibernate.jdbc.batch_size">30</property>
    	
    	<!-- 指定关联的xxx.hbm.xml文件 -->
    	<mapping resource="cn/edu/sdut/hibernate/helloworld/News.hbm.xml"/>
    	<mapping resource="cn/edu/sdut/hibernate/manytoone/Customer.hbm.xml"/>
    	<mapping resource="cn/edu/sdut/hibernate/manytoone/Order.hbm.xml"/>
    	
    	<mapping resource="cn/edu/sdut/hibernate/onetoone/Department.hbm.xml"/>
    	<mapping resource="cn/edu/sdut/hibernate/onetoone/Manager.hbm.xml"/>
    </session-factory>
</hibernate-configuration>




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值