`

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 one-to-many / many-to-one关系映射

    "Hibernate one-to-many / many-to-one关系映射"是两个基本的关系类型,用于表示实体间的关联。在这个主题中,我们将深入探讨这两种关系映射的原理、配置和实际应用。 一、一对一(one-to-one)与一对多(one-to-...

    Hibernate一对一主键关联映射(双向关联)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是一种常见的关系数据库模型映射方式。这种关联通常发生在两个实体之间,且每个实体都只有一个对应的实例。本篇文章将详细探讨双向一对一主键关联映射...

    hibernate 全面学习->hibernate 关联映射学习

    `hibernate_one2one_pk_1`和`hibernate_one2one_pk_2`可能涉及主键级联,即两个表共享相同的主键,而`hibernate_one2one_ufk_1`和`hibernate_one2one_ufk_2`可能是通过外键实现的一对一关系。在Hibernate中,这需要...

    Hibernate关联映射

    9. Hibernate 一对一外键双向关联、主键双向关联、连接表双向关联、一对多外键双向关联、一对多连接表双向关联、多对多双向关联: 这些关联方式与单向关联类似,区别在于两个实体类都知道彼此的关联。在双向关联中...

    hibernate one-to-many 单/双向关联映射配置心得

    本文主要关注Hibernate中的一个核心概念——一对一(One-to-One)、一对多(One-to-Many)和多对一(Many-to-One)关联映射,特别是关于“一到多”单向和双向关联映射的配置心得。 首先,让我们了解“一到多”关联...

    hibernate的关联映射

    【hibernate关联映射详解】 Hibernate 是一款流行的Java持久层框架,用于简化数据库操作。在Hibernate中,关联映射是实现对象关系映射(ORM)的关键,它允许我们在对象模型和关系数据库之间建立联系。关联映射主要...

    hibernate 关联映射(三) one to one(双向)

    本篇将深入探讨一种特殊的关联映射方式——一对一(One to One)映射,特别是在双向关联的情况下的实现。在这个案例中,我们将详细解析`hibernate_one2onepk2`的压缩包文件,了解如何设置和操作这种关联。 一对一...

    Hibernate关联关系映射目录

    ### Hibernate关联关系映射 #### 一、单向关联 单向关联指的是对象之间的关联关系只在一个方向上存在,也就是说这种关联关系仅在一个类中表示出来,在另一个类中不体现这种关联。 ##### 1. 一对一外键单向关联 ...

    hibernate一对一主键关联映射(双项关联)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是一种常见的关系映射方式,用于表示两个实体之间一对一的对应关系。本篇主要探讨的是基于主键(Primary Key)的双向关联映射,这在实际项目中非常常见...

    Hibernate ORM - 一对一主键关联关系

    在一对一(One-to-One)主键关联关系中,两个实体类之间存在唯一对应的关系,通常一个实体对应另一个实体的一个实例,这种关系可以通过共享主键来实现。 在Hibernate中,一对一的主键关联关系可以通过以下几种方式...

    Hibernate 的关联映射

    "Hibernate的关联映射"是Hibernate中的核心概念之一,用于模拟数据库中的关系,包括一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)和多对多(Many-to-Many)四种关系。现在,让我们详细探讨...

    Hibernate 一对一关联映射(主键关联VS唯一外键关联)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的关系数据库模型。本篇文章将深入探讨两种实现一对一关联的方式:主键关联(Primary Key Join)和唯一外键关联(ForeignKey Join),并结合源码...

    Hibernate教程07_关系映射之一对一双向主键关联

    在本教程中,我们将深入探讨Hibernate中的一个关键概念——关系映射,特别是“一对一双向主键关联”。这种关联类型是数据库设计中的常见模式,它允许两个实体类之间通过共享相同的主键来建立关联。在Java应用中,...

    hibernate 映射-一对多双向

    5. **双向关联(Bidirectional Association)**:在双向一对多关联中,两个实体类都需要包含对方的引用。父类中通常使用`@OneToMany`,子类中使用`@ManyToOne`。为了保持数据一致性,需要在代码中管理这两个引用。 ...

    Hibernate一对一唯一外键关联映射(单向关联)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的关系数据库模型在对象模型中的体现。这种关联通常用于表示两个实体之间非常特殊的联系,比如一个人只有一个身份证,或者一个公司只有一个总部...

    Hibernate一对一主键关联映射(单向关联)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的关系映射方式之一,尤其在处理两个实体之间存在唯一对应关系时非常有用。本篇将重点讲解如何实现一对一主键关联映射的单向关联,并通过一个...

Global site tag (gtag.js) - Google Analytics