文档章节

hibernate一对一关系(foregin)

黄柳淞
 黄柳淞
发布于 2016/12/02 17:12
字数 585
阅读 11
收藏 0

1.经理.xml

<?xml version="1.0" encoding="UTF-8"?>
<!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.huangliusong.one2one.foreign.Maneger" table="manegers">
		<id name="m_id" type="java.lang.Integer">
			<column name="m_id" ></column>
			<generator class="native"></generator>
		</id>
		<property name="m_name" type="java.lang.String">
			<column name="m_name"></column>
		</property>
		<!-- 	映射1对1的关联关系 在对应的数据表中已经有外键了 当前持久化使用one2one进行映射 -->
		<one-to-one name="department" 
		class="com.huangliusong.one2one.foreign.Department" property-ref="mgr">
			
		</one-to-one>
	</class>
</hibernate-mapping>

2.部门.xml

<?xml version="1.0" encoding="UTF-8"?>
<!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.huangliusong.one2one.foreign.Department" table="departments">
		<id name="d_id" type="java.lang.Integer">
			<column name="d_id"></column>
			<generator class="native"></generator>
		</id>
		<property name="d_name" type="java.lang.String">
			<column name="d_name"></column>
		</property>
		
		<!-- 使用many1one的方式来映射 一对一的关联关系 -->
		<many-to-one name="mgr" class="com.huangliusong.one2one.foreign.Maneger" column="m_id" update="true">
			
		</many-to-one>
	</class>
</hibernate-mapping>

3.cfg.xml

<?xml version='1.0' encoding='UTF-8'?>
<!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="connection.username">root</property>
		<property name="connection.password">linuxG</property>
		<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
		<property name="connection.url">jdbc:mysql://localhost:3306/hls</property>
		<property name="show_sql">true</property>
		<property name="format_sql">true</property><!-- 格式化sql数据库 -->
		<property name="hbm2ddl.auto">update</property>
		<!-- 配置C3P0数据源  -->
		<property name="hibernate.c3p0.max_size">10</property>
		<property name="hibernate.c3p0.min_size">5</property>
		<property name="c3p0.acquire_increment">2</property>
		
		<property name="c3p0.idle_test_period">2000</property>
		<property name="c3p0.timeout">2000</property>
		
		<property name="c3p0.max_statements">10</property>
		
		<!-- 设定jdbc 的statement读取数据的时候每次从数据库中取出记录的条数 -->
		<property name="hibernate.jdbc.fetch_size">100</property>
		
		<!-- 设定数据库进行批量删除的时候 批量更新 的时候 批次的大小 -->
		<property name="hibernate.jdbc.batch_size">30</property>
		<!-- 删除对象后将OID置为空 -->
		<property name="use_identifier_rollback">true</property>
		
	<mapping resource="com/huangliusong/one2one/foreign/Maneger.hbm.xml"/>
	<mapping resource="com/huangliusong/one2one/foreign/Department.hbm.xml"/>
    </session-factory>
	
</hibernate-configuration>

4.测试

package com.huangliusng.test;

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;

import com.huangliusong.one2one.foreign.Department;
import com.huangliusong.one2one.foreign.Maneger;
import com.mchange.v1.cachedstore.CachedStore.Manager;
import com.sun.mail.handlers.message_rfc822;

public class TestHibernate4 {
	private static SessionFactory sessionFactory;
	private static Session session;
	private static Transaction transaction;

	@Before
	public void init() {
		// 1.创建配置对象
		Configuration config = new Configuration().configure();
		// 2.服务注册对象
		ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
				.applySettings(config.getProperties()).buildServiceRegistry();
		// 3.创建会话工厂
		sessionFactory = config.buildSessionFactory(serviceRegistry);
		// 4.创建会话
		session = sessionFactory.openSession();
		// 5.打开会话
		transaction = session.beginTransaction();
	}

	@After
	public void destory() {
		transaction.commit();
		session.close();
		sessionFactory.close();
	}

	@Test
	public void OneToOne() {
		Department department=new Department();
		department.setD_name("技术部B2");
		Maneger maneger=new Maneger();
		maneger.setM_name("技术部经理B2");
		
		department.setMgr(maneger);
		maneger.setDepartment(department);
		
		session.save(department);
		session.save(maneger);
	}
	@Test 
	public void testGet(){
		//默认对关联属性使用懒加载
		Maneger maneger=(Maneger)session.get(Maneger.class, 1);
		System.out.println(maneger.getM_id());
		System.out.println(maneger.getDepartment().getD_name());
		
		/*System.out.println("==========");
		Department department=(Department)session.get(Department.class, 1);
		System.out.println(department.getMgr().getM_name());*/
		
	}

}

 

© 著作权归作者所有

黄柳淞
粉丝 2
博文 108
码字总数 54251
作品 0
南宁
程序员
私信 提问
Hibernate映射——一对一双向关联映射(六)

我们介绍了一对一的单向关联映射,单向是指只能从人(Person)这端加载身份证端(IdCard),但是反过来,不能从身份证端加载人得信息。如图所示: 关键原因在于对象模型具有方向性: 单向:一...

architect刘源源
2018/01/11
3
0
Hibernate之关联关系映射(一对一主键映射和一对一外键映射)

1:Hibernate的关联关系映射的一对一外键映射:   1.1:第一首先引包,省略   1.2:第二创建实体类:     这里使用用户信息和身份证信息的关系,用户的主键编号既可以做身份证信息的...

别叫小伙
2017/03/22
0
0
Hibernate映射——一对一单向关联映射(五)

映射原理 两个实体对象之间是一对一的关联映射,即一个对象只能与另外唯一的一个对象相对应。例如:一个人(Person)只有一张身份证(IdCard)。我们看一下这个例子的对象模型,如下图所示: 对象...

architect刘源源
2018/01/11
2
0
史上最简单的Hibernate4视频教程(附源码和笔记)

Hibernate4是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合...

2846613430
2016/04/08
1K
0
hibernate one to one

hibernate 注解配置一对一 例如:User和UserInto,先有user后有userInfo,相当于user是父,userInfo是子 这时我们需要在父类(User)中加上 而子类(UserInfo)中 hibernate @OneToOne注释指明User与...

梁家俊
2016/03/14
34
0

没有更多内容

加载失败,请刷新页面

加载更多

Android双向绑定原理简述

Android双向绑定原理简述 双向绑定涉及两个部分,即将业务状态的变化传递给UI,以及将用户输入信息传递给业务模型。 首先我们来看业务状态是如何传递给UI的。开启dataBinding后,编译器为布局...

tommwq
今天
2
0
Spring系列教程八: Spring实现事务的两种方式

一、 Spring事务概念: 事务是一系列的动作,它们综合在一起才是一个完整的工作单元,这些动作必须全部完成,如果有一个失败的话,那么事务就会回滚到最开始的状态,仿佛什么都没发生过一样。...

我叫小糖主
今天
6
0
CentOS 的基本使用

1. 使用 sudo 命令, 可以以 root 身份执行命令, 必须要在 /etc/sudoers 中定义普通用户 2. 设置 阿里云 yum 镜像, 参考 https://opsx.alibaba.com/mirror # 备份mv /etc/yum.repos.d/CentO...

北漂的我
昨天
3
0
Proxmox VE技巧 移除PVE “没有有效订阅” 的弹窗提示

登陆的时候提示没有有效的订阅You do not have a valid subscription for this server. Please visit www.proxmox.com to get a list of available options. 用的是免费版的,所以每次都提示......

以谁为师
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部