`

hibernate笔记(四) 一对一 (唯一外键关联)

阅读更多

Room.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">
<hibernate-mapping package="com.goby.Hibernate.bean">

	<class name="Room" table="t_room">

		<id name="id">
			<generator class="native"></generator>
		</id>

		<property name="address"></property>
		<!--
			constrained(约束) (可选)
			表明该类对应的表对应的数据库表,和被关联的对象所对应的数据库表之间,通过一个外键引用对主键进行约束。
			这个选项影响save()和delete()在级联执行时的先后顺序以及 决定该关联能否被委托(也在schema export
			tool中被使用). 
			
		-->
		<one-to-one name="users" class="User" constrained="true" />
	</class>

</hibernate-mapping>

 

 

User.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">
<hibernate-mapping package="com.goby.Hibernate.bean">

	<class name="User" table="t_user">

		<id name="id">
			<generator class="native"/>
			
		</id>

		<property name="name"/>
		<!-- 
		cascade(级联) (可选) 表明操作是否从父对象级联到被关联的对象。
		 -->
		<many-to-one name="room" class="Room" column="room_id" cascade="all"/>
	</class>

</hibernate-mapping>

 

Test.java

package test;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;



import junit.framework.TestCase;

import org.hibernate.Session;

import com.goby.Hibernate.bean.HibernateUtils;
import com.goby.Hibernate.bean.Role;
import com.goby.Hibernate.bean.User;

public class test extends TestCase {
	
	public void testSave(){
		Session session = null;
		try{
			
			session = HibernateUtils.getSession();
			session.beginTransaction();
			
			Role role1 = new Role();
			role1.setName("manager");
			
			Role role2 = new Role();
			role2.setName("officer");
			
			Role role3 = new Role();
			role3.setName("normal");
			
			Set roles1 = new HashSet();
			roles1.add(role1);
			roles1.add(role2);
			
			Set roles2 = new HashSet();
			roles2.add(role1);
			roles2.add(role3);
			
			User user1 = new User();
			user1.setName("goby");
			user1.setRoles(roles1);
			
			User user2 = new User();
			user2.setName("qq");
			user2.setRoles(roles2);
			
			session.save(user1);
			session.save(user2);
			
			session.getTransaction().commit();
			
		}catch(Exception ex){
			ex.printStackTrace();
			session.getTransaction().rollback();
		}finally{
			HibernateUtils.closeSession(session);
		}
	}
	
	/*
	 * 从User类中获取数据
	 */
	public void testload(){
		Session session = null;
		try{
			
			session = HibernateUtils.getSession();
			session.beginTransaction();
			
			User user = (User)session.load(User.class, 3);
			System.out.println("user.name="+user.getName());
			Set roles = user.getRoles();
			for(Iterator iter = roles.iterator();iter.hasNext();){
				Role role = (Role)iter.next();
				System.out.println("role.name="+role.getName());
			}
			
			session.getTransaction().commit();
			
		}catch(Exception ex){
			ex.printStackTrace();
			session.getTransaction().rollback();
		}finally{
			HibernateUtils.closeSession(session);
		}
	}
	
	/*
	 * 从Role类中获取数据
	 */
	public void testload2(){
		Session session = null;
		try{
			
			session = HibernateUtils.getSession();
			session.beginTransaction();
			
			Role role = (Role)session.load(Role.class, 1);
			System.out.println("role.name="+role.getName());
			Set users = role.getUsers();
			for(Iterator iter = users.iterator();iter.hasNext();){
				User user = (User)iter.next();
				System.out.println("user.name="+user.getName());
			}
			
			session.getTransaction().commit();
			
		}catch(Exception ex){
			ex.printStackTrace();
			session.getTransaction().rollback();
		}finally{
			HibernateUtils.closeSession(session);
		}
	}
}

 

分享到:
评论

相关推荐

    Hibernate数据关联技术笔记

    1:1(一对一)关联表示两个实体之间存在一对一的关系,例如一个人对应一张唯一的身份证。在Hibernate中,可以通过`&lt;one-to-one&gt;`标签实现。如示例所示,`Person`类和`IDCard`类之间的关联就是这样设置的。在`Person....

    Hibernate知识文档 知识点笔记纪要

    一对一的唯一外键关联,一方的外键字段指向另一方的主键,通过`&lt;one-to-one&gt;`标签的`constrained`属性来指定外键的存在。 以上是Hibernate基本知识的概览,实际使用中还需要结合具体业务需求进行更深入的学习和实践...

    Hibernate数据关联技术_1vs1应用案例_笔记

    Hibernate的一对一关联是当两个实体类之间存在唯一对应的关系,例如一个人只有一个身份证。这种关联可以通过在映射文件中定义`&lt;one-to-one&gt;`标签来实现。在上述案例中,`Person`类与`IDCard`类之间就是1:1关系,...

    传智播客2016hibernate框架学习笔记

    7. **一对多、一对一和多对多关系映射**:这部分内容将解释如何配置和处理不同类型的关联关系,包括外键映射、集合映射等。 8. **缓存机制**:Hibernate提供了一级缓存和二级缓存,能有效减少数据库访问,提高应用...

    Hibernate映射笔记

    - `&lt;one-to-one&gt;`、`&lt;many-to-one&gt;`、`&lt;one-to-many&gt;`和`&lt;many-to-many&gt;`:分别用于一对一、一对多、多对一和多对多的关系映射,通过`&lt;class&gt;`元素的嵌套和属性如`inverse`、`cascade`等来控制关系的维护方式和级联...

    hibernate学习笔记第二天的源码

    Hibernate支持多种关联映射,如一对一、一对多、多对一、多对多。在源码中,开发者可能展示了如何通过XML映射文件或注解配置这些关联,并演示了如何在代码中处理这些关系。 通过分析`hibernate_day02`的源码,我们...

    邹波老师Hibernate教程学习笔记

    7. **一对多、多对一、一对一和多对多关系映射**:在数据库设计中常见的关联关系,笔记会详细讲解如何在Hibernate中配置和操作这些关系,包括联合主键、外键约束等。 8. **懒加载与立即加载**:Hibernate提供了懒...

    Hibernate笔记

    这种关联表示“一对一”的关系。在基于外键的1-1关联中,只需在`&lt;many-to-one&gt;`元素上添加`unique="true"`属性。对于基于主键的1-1关联,我们可以使用`&lt;one-to-one&gt;`元素,让两个实体的主键互相引用。 C. 单向1-N...

    达内HIBERNATE学习笔记

    #### 3.3 一对一关联 - **特点**:一个实体只能与另一个实体关联。 - **实现方式**:可以使用外键或单独的关联表。 #### 3.4 一对多关联 - **特点**:一个实体可以与多个实体关联。 - **实现方式**:通常使用外键。...

    Hibernate_容器映射技术笔记

    在示例中,Person类有一个名为`emails`的集合,它映射到emails表,并通过`&lt;key&gt;`标签指定外键关联。 2. **List**: List是允许重复元素的集合,适合存储可能重复的数据。在数据库中,可以通过增加一个索引字段来区别...

    Hibernate3 学习笔记.ppt

    1. 合理设计实体类,避免过多的一对多关系。 2. 使用懒加载以提高性能。 3. 使用事务管理,确保数据一致性。 4. 避免在循环中执行查询,可能导致大量数据库交互。 5. 使用二级缓存,提高应用性能。 6. 谨慎使用级联...

    hibernate笔记--云图智联

    例如,在一对多关系中,配置级联添加后,添加父对象时会自动为关联的子对象设置外键。 ###Hibernate的缓存机制 Hibernate拥有三级缓存:一级缓存是Session级别的,二级缓存是Session Factory级别的,查询缓存是针对...

    Hibernate学习笔记_songjignhao_1

    Student 类的 id 字段与 IdCard 类的 id 字段相同,形成一对一关系。在 Hibernate 映射文件中,通过将 `column` 属性设置为相同的列名,表明它们共享同一主键。而在外键关联中,一方(通常是非主表)拥有指向另一方...

Global site tag (gtag.js) - Google Analytics