`

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

 
阅读更多

 

这次介绍 还是以Person 和 Address 为例.. 

one to one 1对1 单向 主键关联.. 在一方关联另外一方,1对1,不能两方,同时拥有主键策略, 只能在一方设置为foreign 外键关联到另一方的主键.

 

 

下面是的具体代码:

Person_PK_One_to_One:

import java.io.Serializable;
public class Person_PK_One_to_One implements Serializable{
	private static final long serialVersionUID = -3370288005329889696L;
	
	private Integer id;
	private String name;
	private Integer age;
	private Address_PK_One_to_One addressPKOneToOne;

              //getter 和settter方法省略

}

 

Address_PK_One_to_One:

public class Address_PK_One_to_One implements Serializable{
	private static final long serialVersionUID = -1281147151620979875L;
	private Integer addressID;
	private String addressDetail;
	//getter和setter方法省略;
}

 

下面是Hibernate配置文件:

Person_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 package="pack.java.model">
	<class name="Person_PK_One_to_One" table="PERSON_PK_ONE_TO_ONE">
		<id column="ID" name="id" type="java.lang.Integer">
			<!-- 
			    这里主键 设foreign是因为,one to one的关联时,不能两个类,同时拥有自己的主键生成策略,
			     所以,在一方作为foreign,引用到另一方的主键即可。
			 -->
			<generator class="foreign">
				<param name="property">addressPKOneToOne</param>
			</generator>
		</id>
		<property name="name" column="NAME"></property>
		<property name="age" column="AGE"></property>
		
		<!-- constrained="true" 表示,该类的主键由关联类生成。 -->
		<one-to-one name="addressPKOneToOne" constrained="true"></one-to-one>
	</class>
</hibernate-mapping>                                   

 

Address_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 package="pack.java.model">
	<class name="Address_PK_One_to_One" table="ZHT_ADDRESS_PK_ONE_TO_ONE">
		<id name="addressID" column="ADDRESS_ID" type="java.lang.Integer">
			<generator class="identity"></generator>
		</id>
		
		<!-- 地址详情 -->
		<property name="addressDetail" column="ADDRESSDETAIL" type="java.lang.String"></property>
	</class>
</hibernate-mapping>

 

写好配置文件后,接下来在Hibernate.cfg.xml中加入 刚刚新建的两个Mapping映射文档.

<mapping resource="pack/java/model/Person_PK_One_to_One.hbm.xml"/>

<mapping resource="pack/java/model/Address_PK_One_to_One.hbm.xml"/>

 

 

之后,就新建一个Test类,

用来测试1对1 主键关联的映射关系.

package pack.java.test;

import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import pack.java.hibernate.HibernateSessionFactory;
import pack.java.model.Address_PK_One_to_One;
import pack.java.model.Person_PK_One_to_One;

public class HibernateDemoOneTo_One {
	public static void main(String[]args){
		HibernateDemoOneTo_One demoOneToOne = new HibernateDemoOneTo_One();
		Session session = demoOneToOne.getSession();
		
		//保存;
		demoOneToOne.savePersonAndAddress(session);
		
		//查询;
		demoOneToOne.queryPerson(session);
	}
	
	/**
	 * 保存Person和Address;
	 * @param session
	 */
	private void savePersonAndAddress(Session session){
		Address_PK_One_to_One addressPKOneToOne = new Address_PK_One_to_One();
		addressPKOneToOne.setAddressDetail("湖南省株洲市");
		
		Person_PK_One_to_One personPKOneToOne = new Person_PK_One_to_One();
		personPKOneToOne.setName("ZhouHaiTao");
		personPKOneToOne.setAge(23);
		personPKOneToOne.setAddressPKOneToOne(addressPKOneToOne);
		
		//开启事务;
		session.beginTransaction().begin();
		//保存操作;
		session.save(personPKOneToOne);
		System.out.println("保存成功!");
		session.beginTransaction().commit();
		
		//关闭session;
		session.close();
	}
	
	/**
	 * 查询Person对象和Address对象;
	 * @param session
	 */
	private void queryPerson(Session session){
		
		if(session!=null && !session.isOpen()){
			session = HibernateSessionFactory.getSession();
		}
		String hql="select p from Person_PK_One_to_One p where p.id = :pid";
		Query query = session.createQuery(hql);
		query.setParameter("pid",1);
		
		List<Person_PK_One_to_One> list = query.list();
		for (Person_PK_One_to_One personPKOneToOne : list) {
			System.out.println(personPKOneToOne.getId()+","+personPKOneToOne.getName()+","+personPKOneToOne.getAge()+","+personPKOneToOne.getAddressPKOneToOne().getAddressDetail());
		}
		
		session.close();
	}
	
	/**
	 * 获取session;
	 * @return
	 */
	private Session getSession(){
		Session session = HibernateSessionFactory.getSession();
		return session;
	}
}

 

 

 

 

分享到:
评论

相关推荐

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

    接下来是“多对一”(Many-to-One)映射,与一对多相反,一个子实体可以关联到多个父实体。例如,多个订单可以属于同一个客户。`hibernate_many2one`的案例可能展示了如何在子类中使用`@ManyToOne`注解来指定与父类...

    Hibernate关联映射

    在 Hibernate 映射中,需要使用 `one-to-one` 元素,并设置 `constrained="true"`,表明该类的主键由关联类生成。 3. Hibernate 一对一连接表单向关联: 这种关联方式是通过额外的连接表来实现一对一关系的。连接...

    hibernate的关联映射

    关联映射主要包括四种类型:一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)和多对多(Many-to-Many)。下面我们将逐一探讨这些关联映射的配置方法。 1. **一对一关联映射** - **主键关联**...

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

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

    Hibernate_实体关联关系映射--学习总结

    实体关联关系映射涉及一对一、一对多、多对多等多种形式,而这些映射方式又可以分为单向和双向,依据使用的是主键还是外键,以及是否使用连接表。接下来,我们详细介绍这些知识点。 ###Hibernate实体关联关系映射...

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

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

    Hibernate关联关系映射目录

    -- 用来映射关联PO,必须为one-to-one元素增加constrained="true"属性 --&gt; &lt;one-to-one name="address" constrained="true"/&gt; &lt;/hibernate-mapping&gt; ``` --- ##### 3. 一对一连接表单向关联 在一对一连接表单...

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

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

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

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

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

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

    Hibernate教程06_关系映射之一对一单向主键关联

    本教程聚焦于一对一(One-to-One)单向主键关联,这是一种特定类型的关系映射,其中一个实体类完全依赖于另一个实体类的主键。这里的"单向"意味着只有一个实体类知道这种关联,而另一个实体类并不包含对应的引用。 ...

    hibernate 主键一对一映射(单向) 实例(java类)

    在Java的持久化框架Hibernate中,一对一(One-to-One)映射是一种常见的关系映射方式,它用于表示两个实体之间一对一的关联关系。在这种关系中,一个实体对应另一个实体的唯一实例。本实例将深入探讨如何在Hibernate...

    Hibernate 关联关系映射分类

    综上所述,Hibernate提供了丰富的关联关系映射机制,包括一对一、一对多和多对多关联,每种关联又可以细分为单向和双向,以及基于主键和基于外键的不同实现方式。正确理解和选择合适的关联关系对于构建高效、可维护...

    hibernate主键实现一对一单向关联关系源码

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联关系是常见的一种实体关系映射。本主题将深入探讨如何使用Hibernate通过主键来实现一对一的单向关联关系,并提供相关的源码分析。 首先,我们需要理解一对...

    hibernate关联映射

    在Person类中添加`private Address address`属性,并在`person.hbm.xml`中配置`&lt;many-to-one&gt;`元素,如`&lt;many-to-one name="address" cascade="all" class="Address" column="address_id"/&gt;`。这表示Person表中的...

    hibernate的关联关系映射

    单向关联意味着只从一个方向访问关联对象,例如,只需要从Course对象获取任教的Teacher对象,那么只需在Course.hbm.xml中添加`&lt;many-to-one&gt;`标签,指定Teacher类和column属性(teacher_id)。如果需要从Teacher对象...

    Hibernate关联映射.doc

    - 多方配置文件中添加`&lt;many-to-one&gt;`标签,表示多方与一方之间的关联。 ```xml &lt;many-to-one name="一方对象作为属性的名称" class="一方类包括了路径的" column="一方主键id" not-null="true"/&gt; ``` 3. **...

Global site tag (gtag.js) - Google Analytics