`

hibernate笔记(三) 一对一 (主键关联)

阅读更多

Room.java

package com.goby.Hibernate.bean;

public class Room {
	
	private int id;
	
	private String address;
	
	private User users;

	public User getUsers() {
		return users;
	}

	public void setUsers(User users) {
		this.users = users;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}
	
}

  

 

User.java

package com.goby.Hibernate.bean;

public class User {
	
	private int id;
	
	private String name;
	
	private Room room;

	public Room getRoom() {
		return room;
	}

	public void setRoom(Room room) {
		this.room = room;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	
}

  

 

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="foreign">
				<param name="property">users</param>
			</generator>
		</id>
		
		<property name="address"></property>
		<one-to-one name="users" 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"></property>
		<one-to-one name="room"/>
	</class>

</hibernate-mapping>

 

Hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
	<session-factory >
	<property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate_OnetoOne</property>
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">seebig</property>
		<property name="hibernate.show_sql">true</property>
		<property name="hibernate.format_sql">false</property>
		
		<mapping resource="com/goby/Hibernate/bean/User.hbm.xml" />
		<mapping resource="com/goby/Hibernate/bean/Room.hbm.xml" />
	</session-factory>
</hibernate-configuration>

 

测试代码:Test.java

package test;

import junit.framework.TestCase;

import org.hibernate.Session;

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

/*
 * 一对一  (主键关联)
 * 
 */

public class test extends TestCase {
	
	public void testSave(){
		Session session = null;
		try{
			
			session = HibernateUtils.getSession();
			session.beginTransaction();
			
			User users = new User();
			users.setName("goby");
			
			Room room = new Room();
			room.setAddress("jiangmen");
			room.setUsers(users);
			
			session.save(room);
			
			session.getTransaction().commit();
			
		}catch(Exception ex){
			ex.printStackTrace();
			session.getTransaction().rollback();
		}finally{
			HibernateUtils.closeSession(session);
		}
	}
	
	/*
	 * 从ROOM类中获取数据
	 */
	public void testload(){
		Session session = null;
		try{
			
			session = HibernateUtils.getSession();
			session.beginTransaction();
			
			Room room = (Room)session.load(Room.class, 1);
			System.out.println("room.address=" + room.getAddress());
			System.out.println("user.name=" + room.getUsers().getName());
			
			session.getTransaction().commit();
			
		}catch(Exception ex){
			ex.printStackTrace();
			session.getTransaction().rollback();
		}finally{
			HibernateUtils.closeSession(session);
		}
	}
	
	/*
	 * 从User类中获取数据
	 */
	public void testload2(){
		Session session = null;
		try{
			
			session = HibernateUtils.getSession();
			session.beginTransaction();
			
			User user = (User)session.load(User.class, 1);
			System.out.println("user.name ="+user.getName());
			System.out.println("room.address=" + user.getRoom().getAddress());
			
			session.getTransaction().commit();
			
		}catch(Exception ex){
			ex.printStackTrace();
			session.getTransaction().rollback();
		}finally{
			HibernateUtils.closeSession(session);
		}
	}
}

 

分享到:
评论

相关推荐

    韩顺平hibernate笔记

    在关系型数据库中,常见的关联关系有一对多、多对一和多对多。Hibernate提供了丰富的注解和XML配置来处理这些关系,如`@OneToMany`、`@ManyToOne`、`@ManyToMany`。理解和掌握这些关联关系对于设计复杂的业务模型至...

    hibernate笔记

    - **对象关系映射(ORM)**: Hibernate 提供了一种桥梁,将 Java 对象与数据库中的记录关联起来,使得开发者可以避免直接编写 SQL,降低了数据库操作的复杂性。 - **Session 和 Transaction**: Session 是 ...

    Hibernate数据关联技术笔记

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

    hibernate第一天笔记

    《Hibernate入门:第一天笔记详解》 Hibernate,作为Java领域中著名的ORM(Object-Relational Mapping)框架,极大地简化了数据库操作,让开发者可以更加专注于业务逻辑而不是底层的数据访问。本文将基于第一天学习...

    Hibernate学习笔记特别详细

    以上便是对Hibernate基础的概览,实际开发中,还需要深入了解实体关系映射、集合映射、级联操作、缓存机制、事务管理、性能优化等方面的知识,才能更好地利用Hibernate提升开发效率并保证应用程序的稳定运行。...

    马士兵hibernate学习笔记(原版)

    5. **关系映射**:Hibernate支持多种关系映射,如一对一、一对多、多对一、多对多,通过配置文件或注解定义实体间的关联,使得对象间的复杂关系能在数据库中准确反映。 6. **Hibernate查询**:Hibernate提供HQL...

    Hibernate全部笔记

    3. **关系映射**:@OneToOne、@OneToMany、@ManyToOne、@ManyToMany等注解用于处理一对一、一对多、多对一和多对多的关系。 **四、Session与Transaction** 1. **SessionFactory**:负责创建Session实例,是线程安全...

    Hibernate笔记

    ### Hibernate笔记 #### 一、概述 Hibernate 是一个开源的对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互过程。通过使用Hibernate,开发者可以将对象模型与关系型数据库模型进行映射,从而避免...

    韩顺平hibernate笔记及图解

    Hibernate支持多种对象关系映射,如一对一、一对多、多对一、多对多。这些关系可以通过注解或XML配置文件进行定义,实现对象间的关联。 总结起来,"韩顺平hibernate笔记及图解"涵盖了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`等来控制关系的维护方式和级联...

    Java相关课程系列笔记之十四Hibernate学习笔记

    - 对象关系映射:将Java对象与数据库表建立一对一、一对多、多对一、多对多的映射关系。 - 缓存机制:提供第一级缓存(Session级别的)和第二级缓存(SessionFactory级别的),提高性能。 - 支持懒加载和立即加载:...

    hibernate_day02笔记

    【hibernate_day02笔记】...以上就是Hibernate_day02笔记中的主要知识点,包括ORM思想、实体类设计、主键策略、操作实体类的方法、对象状态、一级缓存以及事务管理。这些内容构成了使用Hibernate进行数据库操作的基础。

    黑马程序员 hibernate 2016版讲义和笔记(4天全)

    9. 高级特性:进一步深入,包括一对多、多对一、一对一、多对多关系的映射,级联操作,延迟加载,双向关联的维护,以及集合的映射等。此外,还可以探讨CGLIB和ASM动态代理,以及Hibernate的事件监听机制。 通过这4...

    hibernate学习笔记文档

    - 在实体类设计时,通过关联属性定义一对多或多对多的关系。 - 在 XML 映射文件中使用 `&lt;one-to-many&gt;` 或 `&lt;many-to-many&gt;` 标签来配置这些关系。 - **查询操作**: - 使用 HQL(Hibernate Query Language)或 ...

    Hibernate实战笔记

    默认情况下,一对多的关系使用立即检索。 - **延迟检索**:`lazy="true"`且`outer-join="false"`。优先推荐使用。 - **迫切左外连接检索**:`lazy="false"`且`outer-join="true"`。仅适用于通过ID检索的方式,如`...

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

    总结,本笔记提供的案例展示了如何在Hibernate中实现一对一关联,并结合Struts框架构建完整的Web应用程序,涵盖了从数据库设计、实体类映射到前后端交互的全过程,对于理解和运用Hibernate的1:1关联技术具有很好的...

Global site tag (gtag.js) - Google Analytics