`

Hibernate关联映射-one to one主键双向关联

 
阅读更多

 

这次,继续上一次的实例。 记录1对1 主键双向关联.

还是Person和 Address为例.

 

请直接看代码:

Person_SX_PK_One_to_One:

public class Person_SX_PK_One_to_One {
	private Integer id;
	private String name;
	private Integer age;
	private Address_SX_PK_One_To_One addressSXPKOneToOne;

//getter和setter方法省略
}

 

Address_SX_PK_One_To_One:

public class Address_SX_PK_One_To_One {
	private Integer id;
	private String addressDetail;
	private Person_SX_PK_One_to_One personSXPKOneToOne;
	
//getter和setter方式省略
}

 

 

Hibernate配置文件:

Person_SX_PK_One_to_One.hbm.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="pack.java.model.Person_SX_PK_One_to_One" table="ZHT_PERSON_SX_PK_ONE_TO_ONE">
		<id name="id" column="ID">
			<generator class="identity"></generator>
		</id>
		
		<property name="name" column="NAME"></property>
		<property name="age" column="AGE"></property>
		
		<!-- 1对1,引用address对象, -->
		<one-to-one 
			name="addressSXPKOneToOne" 
			class="pack.java.model.Address_SX_PK_One_To_One" 
			fetch="select" 
			lazy="false"
			cascade="all">
		</one-to-one>
	</class>
</hibernate-mapping>

 

 

Address_SX_PK_One_To_One.hbm.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="pack.java.model.Address_SX_PK_One_To_One" table="ZHT_ADDRESS_SX_PK_ONE_TO_ONE">
		<id column="ID" name="id">
			<!-- generator 主键生成策略,配制成foreign,外键,是引用主表person的对象。 -->
			<generator class="foreign">
				<param name="property">personSXPKOneToOne</param>
			</generator>
		</id>
		
		<property name="addressDetail" column="ADDRESSDETAIL"></property>
		
		<!-- 表示在address表中,存在外键约束,外键参考相关表person对象。 -->
		<one-to-one name="personSXPKOneToOne" constrained="true"></one-to-one>
	</class>
</hibernate-mapping>

 

 

在Hibernate.cfg.xml配置刚刚添加的两个映射hibernate.hbm.xml文件。

 

配置好之后,就进行测试.

写一个Test类,

 

package pack.java.test;

import org.hibernate.Session;
import pack.java.hibernate.HibernateSessionFactory;
import pack.java.model.Address_SX_PK_One_To_One;
import pack.java.model.Person_SX_PK_One_to_One;
/**
 * 1对1,主键双向关联。
 * @author Administrator
 *
 */
public class HibernateDemoXS_PK_OneToOne {
	public static void main(String[] args) {
		HibernateDemoXS_PK_OneToOne demoXSPKOneToOne = new HibernateDemoXS_PK_OneToOne();
		Session session = demoXSPKOneToOne.getSession();
	
		//保存操作;
		demoXSPKOneToOne.savePerson(session);
		
		//查询;
		Person_SX_PK_One_to_One  personSXPKOneToOne = demoXSPKOneToOne.queryPersonBy(1);
		
		System.out.println("\n结果查询如下:");
		System.out.println(personSXPKOneToOne.getId()+","+personSXPKOneToOne.getName()+","+personSXPKOneToOne.getAge()+","+personSXPKOneToOne.getAddressSXPKOneToOne().getAddressDetail());
		
		//更新;
		demoXSPKOneToOne.updatePersonByPersonID(1);
		
		//再次查询;
		personSXPKOneToOne = demoXSPKOneToOne.queryPersonBy(1);
		System.out.println("\n结果查询如下:");
		System.out.println(personSXPKOneToOne.getId()+","+personSXPKOneToOne.getName()+","+personSXPKOneToOne.getAge()+","+personSXPKOneToOne.getAddressSXPKOneToOne().getAddressDetail());
		
	}
	
	/**
	 * 根据Person编号,查询Person对象;
	 * @param personID
	 */
	private Person_SX_PK_One_to_One queryPersonBy(Integer personID){
		//获取session;
		Session session = getSession();
		Person_SX_PK_One_to_One personSXPKOneToOne  = (Person_SX_PK_One_to_One) session.load(Person_SX_PK_One_to_One.class, personID);
		return personSXPKOneToOne;
	}
	
	/**
	 * 更新操作;
	 * @param personID
	 */
	private void updatePersonByPersonID(Integer personID){
		//先查询出person,然后,在更新;
		Person_SX_PK_One_to_One personSXPKOneToOne = queryPersonBy(personID);
		
		personSXPKOneToOne.setName("张无忌");
		personSXPKOneToOne.setAge(23);
		
		//获取session;
		Session session = getSession();
		
		//开始事务,更新操作, 提交事务。
		session.beginTransaction().begin();
		session.update(personSXPKOneToOne);
		session.beginTransaction().commit();
		session.close();
	}
	
	/**
	 * 保存
	 * @param session
	 */
	private void savePerson(Session session){
		Person_SX_PK_One_to_One person = new Person_SX_PK_One_to_One();
		person.setAge(63);
		person.setName("张三丰");
		
		Address_SX_PK_One_To_One address = new Address_SX_PK_One_To_One();
		address.setAddressDetail("北京市朝阳区东三环北路");
		
		//给person设置address;
		person.setAddressSXPKOneToOne(address);
		
		//给address设置person;
		address.setPersonSXPKOneToOne(person);
		
		//保存操作;
		session.beginTransaction().begin();
		session.save(person);
		session.beginTransaction().commit();
		session.close();
		System.out.println("保存成功!");
	}
	
	/**
	 * 获取session;
	 * @return
	 */
	private Session getSession(){
		return HibernateSessionFactory.getSession();
	}
}

 

 

控制台输出如下:

 

保存成功!

 

结果查询如下:
1,张三丰,63,北京市朝阳区东三环北路

 

结果查询如下:
1,张无忌,23,北京市朝阳区东三环北路

分享到:
评论

相关推荐

    Hibernate学习笔记

    020 &lt;one-to-one&gt;、&lt;many-to-one&gt;单端关联上的 lazy(懒加载)属性 021 继承关联映射 022 component(组件)关联映射 023 复合主键 关联映射 024 其它 关联映射 025 hibernate 悲观锁、乐观锁 026 hibernate 操作树形...

    hibernate学习笔记

    hibernate一对一主键关联映射(双向关联Person&lt;----&gt;IdCard) 9 hibernate一对一唯一外键关联映射(单向关联Person----&gt;IdCard) 10 hibernate一对一唯一外键关联映射(双向关联Person&lt;----&gt;IdCard) 11 session ...

    Hibernate_Annotation关联映射

    Hibernate Annotation几种关联映射 一对一(One-To-One) 使用@OneToOne注解建立实体Bean之间的一对一关联。一对一关联有三种情况:(1).关联的实体都共享同样的主键,(2).其中一个实体通过外键关联到另一个实体的主键...

    Java的Hibernate框架中的双向主键关联与双向外键关联

    Hibernate想要实现双向的关联就必须在映射文件的两端同时配置&lt;one&gt;,另外还要在主映射的一端采用foreign外键关联属性,下面我们就一起来看一下Java的Hibernate框架中的双向主键关联与双向外键关联方法:

    Hibernate 中文 html 帮助文档

    6.2.5. 一对多关联(One-to-many Associations) 6.3. 高级集合映射(Advanced collection mappings) 6.3.1. 有序集合(Sorted collections) 6.3.2. 双向关联(Bidirectional associations) 6.3.3. 双向关联,...

    hibernate 体系结构与配置 参考文档(html)

    一对多关联(One-to-many Associations) 6.3. 高级集合映射(Advanced collection mappings) 6.3.1. 有序集合(Sorted collections) 6.3.2. 双向关联(Bidirectional associations) 6.3.3. 双向关联,涉及...

    Hibernate教程

    Hibernate参考文档 ...24.4.1. "Typed" one-to-one association 24.4.2. Composite key example 24.4.3. Content based discrimination 24.4.4. Associations on alternate keys 25. 最佳实践(Best Practices)

    Hibernate中文API大全

    当然,当你定义Item时,你无法引用这些purchase,因此你无法实现双向关联查询。记住组件是值类型,并且不允许共享引用。某一个特定的Purchase 可以放在Order的集合中,但它不能同时被Item所引用。 其实组合元素的...

    最全Hibernate 参考文档

    6.2.5. 一对多关联(One-to-many Associations) 6.3. 高级集合映射(Advanced collection mappings) 6.3.1. 有序集合(Sorted collections) 6.3.2. 双向关联(Bidirectional associations) 6.3.3. 三重关联...

    Hibernate3的帮助文档

    7.2.5. 一对多关联(One-to-many Associations) 7.3. 高级集合映射(Advanced collection mappings) 7.3.1. 有序集合(Sorted collections) 7.3.2. 双向关联(Bidirectional associations) 7.3.3. 三重关联...

    hibernate 框架详解

    一对多关联(One-to-many Associations) 7.3. 高级集合映射(Advanced collection mappings) 7.3.1. 有序集合(Sorted collections) 7.3.2. 双向关联(Bidirectional associations) 7.3.3. 三重关联...

    hibernate3.04中文文档.chm

    符合Java习惯的关系...24.4.1. \"Typed\" one-to-one association 24.4.2. Composite key example 24.4.3. Content based discrimination 24.4.4. Associations on alternate keys 25. 最佳实践(Best Practices)

    Hibernate3+中文参考文档

    6.2.5. 一对多关联(One-to-many Associations) 6.3. 高级集合映射(Advanced collection mappings) 6.3.1. 有序集合(Sorted collections) 6.3.2. 双向关联(Bidirectional associations) 6.3.3. 三重关联...

    Hibernate参考文档

    6.2.5. 一对多关联(One-to-many Associations) 6.3. 高级集合映射(Advanced collection mappings) 6.3.1. 有序集合(Sorted collections) 6.3.2. 双向关联(Bidirectional associations) 6.3.3. 双向关联,...

    精通hibernate:对象持久化技术孙卫琴第二版part2

    7.2 映射一对多双向关联关系 156 7.2.1 [set]元素的inverse属性 161 7.2.2 级联删除 163 7.2.3 父子关系 164 7.3 映射一对多双向自身关联关系 165 7.4 改进持久化类 171 7.5 小结 175 7.6 思考题 176 第8章 ...

    精通Hibernate:对象持久化技术第二版part3

    7.2 映射一对多双向关联关系 156 7.2.1 [set]元素的inverse属性 161 7.2.2 级联删除 163 7.2.3 父子关系 164 7.3 映射一对多双向自身关联关系 165 7.4 改进持久化类 171 7.5 小结 175 7.6 思考题 176 第8章 ...

    jdbc基础和参考

    many-to-one:标签中对于cascade的取值delete,delete-orphan,all-delete-orphan(只用unique属性值不为true不能出现)慎用 cascade:级联属性 none:不做任何级联操作 save-update:对当前对象执行save,update, ...

    NHibernate中文帮组文档(2008.11月更新)

    6.8. 双向关联(Bidirectional associations) 6.9. 三重关联(Ternary associations) 6.10. 异质关联(Heterogeneous Associations) 6.11. 集合例子(Collection example) 7. 组件(Component)映射 7.1. 依赖...

    NHibernate参考文档 2.0.0 chm

    6.8. 双向关联(Bidirectional associations) 6.9. 三重关联(Ternary associations) 6.10. 异质关联(Heterogeneous Associations) 6.11. 集合例子(Collection example) 7. 组件(Component)映射 7.1. 依赖...

    Java学习笔记-个人整理的

    {1.9.6}go-to}{33}{subsection.1.9.6} {1.9.7}\texttt {do-while}}{33}{subsection.1.9.7} {1.10}数组(array)}{34}{section.1.10} {1.10.1}数组变量的声明}{34}{subsection.1.10.1} {1.10.2}数组变量的初始化...

Global site tag (gtag.js) - Google Analytics