`
smiky
  • 浏览: 257803 次
  • 性别: Icon_minigender_1
  • 来自: 天门
社区版块
存档分类
最新评论

one-to-one关联(唯一外键关联)

阅读更多

唯一外键一对一关联是多对一关联的一种特例。在子表中,相同的外键只能出现一次,从而保证一对一

本例的关键在于many-to-one与one-to-one中property-ref这个属性含义的了解

1.实体类

这里以顾客与房间为例(一个顾客只能住一个房间):

Customer类:

public class Customer {

	private int customerId;
	private String customerName;
	private Room room;
	
	public Room getRoom() {
		return room;
	}
	public void setRoom(Room room) {
		this.room = room;
	}
	public int getCustomerId() {
		return customerId;
	}
	public void setCustomerId(int customerId) {
		this.customerId = customerId;
	}
	public String getCustomerName() {
		return customerName;
	}
	public void setCustomerName(String customerName) {
		this.customerName = customerName;
	}
}

 Room:

public class Room {

	private int roomId;
	private String roomName;
	private Customer customer;
	public int getRoomId() {
		return roomId;
	}
	public void setRoomId(int roomId) {
		this.roomId = roomId;
	}
	public String getRoomName() {
		return roomName;
	}
	public void setRoomName(String roomName) {
		this.roomName = roomName;
	}
	public Customer getCustomer() {
		return customer;
	}
	public void setCustomer(Customer customer) {
		this.customer = customer;
	}
	
	
}

 2.映射文件

customer.hbm.xml

<hibernate-mapping package="org.zengge.hibernate.onetoone.pojo">
	<class name="Customer" table="customer">
		<id name="customerId" type="integer">
			<generator class="native" />
		</id>
		<property name="customerName" type="string"/>
		<many-to-one name="room" class="Room" column="roomId" unique="true"/>
		<!-- 
			property-ref: (可选) 指定关联类的一个属性,这个属性将会和本外键相对应。 如果没有指定,会使用对方关联类的主键。 
			也就是说默认Customer的外键与Room的主键相关联,如果外键要与Room的其它属性相关联就必须指定一个Room类中的属性。
		 -->
	</class>
</hibernate-mapping>

 对于many-to-one:

name:与外键相关联的属性名

class:相关联的类名

column:many-to-one会在子表中新建一个外键列,用于指定外键名

unique:表示为该列添加唯一性约束

 

Room.hbm.xml

<hibernate-mapping package="org.zengge.hibernate.onetoone.pojo">
	<class name="Room" table="room">
		<id name="roomId" type="integer">
			<generator class="native"></generator>
		</id>
		<property name="roomName" type="string" ></property>
		<one-to-one name="customer" class="Customer" property-ref="room"></one-to-one>
		<!-- 
			这里的property-ref=room指定的是Customer类中与Room关联的属性,而不是表中的,所以不是roomId
			property-ref: (可选) 指定关联类的属性名,这个属性将会和本类的主键相对应。如果没有指定,会使用对方关联类的主键。
			在Customer类中room对应表中的roomId,那么就是说用Customer中的外键roomId与Room中的主键roomId相关联。如果没指定,
			就会将roomId与customerId关联,这样显然是不对的
		 -->
	</class>
</hibernate-mapping>

 one-to-one:

name表示相关联的属性名

class表示相关联的类名

property-ref(上面己讲),这个是关键,切记它指定的是相关联的类中的属性,而不是表中的列名

 

3.hibernate.cfg.xml

<hibernate-configuration>
  <session-factory>
  	<property name="connection.username">root</property>
  	<property name="connection.password">root</property>
  	<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
  	<property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
  	<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
  	<property name="show_sql">true</property>
  	<property name="hbm2ddl.auto">update</property>
  	<mapping resource="org/zengge/hibernate/onetoone/pojo/Customer.hbm.xml"/>
  	<mapping resource="org/zengge/hibernate/onetoone/pojo/Room.hbm.xml"/>

  </session-factory>
</hibernate-configuration>

 4.测试

public void testSave(){
		
		Session session = HibernateUtils.getSession();
		Transaction tr = session.beginTransaction();
		Room room = new Room();
		room.setRoomName("moon");
		Customer customer = new Customer();
		customer.setCustomerName("sky");
		session.save(room);
		customer.setRoom(room);
		session.save(customer);
		tr.commit();
		
	}
分享到:
评论

相关推荐

    hibernate one-to-one 一对一唯一外键关联映射_单向 and 双向

    在上面的配置中, `&lt;many-to-one&gt;` 标签指定了Person实体与IdCard实体之间的一对一唯一外键关联关系,其中unique="true"指定了多的一端的多重性为一。 Hibernate 一对一唯一外键关联映射的应用 在实际应用中,一对...

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

    本话题主要探讨的是Hibernate中的一种关联映射方式——一对一(One-to-One)单向外键关联。这种关联模式通常用于两个实体之间存在唯一对应的关系,例如一个用户对应一个唯一的账户。 在Hibernate中,一对一关联可以...

    Hibernate one-to-many / many-to-one关系映射

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

    (4)Hibernate中的many-to-one和one-to-many关系

    在双向关联中,一方(通常是one-to-many的一方)需要通过`@OneToMany(mappedBy="")`来指定关联的另一方的属性,而另一方(many-to-one)则无需指定`mappedBy`,直接使用`@ManyToOne`即可。 4. 外键的处理 在one-to-...

    hibernate学习5之one-to-many双向关联.docx

    在配置双向一对多关联时,我们通常在"多"一端(这里是`Student`)的集合属性上使用`&lt;many-to-one&gt;`标签,将`Classes`对象映射到数据库中的外键。同时,在"一"端(`Classes`)使用`&lt;set&gt;`标签,表示班级可以包含多个...

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

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

    Many-to-one关联映射

    关联映射的本质: 将关联关系映射到数据库,所谓的...&lt;many-to-one&gt;会在多的一端加入一个外键,指向一的一端,这个外键是由&lt;many-to-one&gt; 中的column属性定义的,如果忽略了这个属性那么默认的外键与实体的属性一致

    hibernate中基于外键的one2one

    基于外键的One-to-One映射是其中的一种实现方式,它通过在一方或双方实体的表中添加外键来建立关联。接下来,我们将深入探讨这种映射策略及其配置。 **1. 一对一关系的概念** 一对一关系是指两个实体之间存在唯一的...

    hibernate一对一之唯一外键关联(双向关联)

    在XML配置文件中,我们需要在`&lt;one-to-one&gt;`元素中指定关联的实体和外键字段。在注解方式下,使用`@OneToOne`注解并指定`@JoinColumn`或`@MapsId`。 5. **懒加载与即时加载** - Hibernate提供了懒加载和即时加载...

    hibernate一对一唯一外键关联映射(单项关联)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的关系映射方式之一,尤其在处理数据库中的唯一外键关联时。这种映射方式允许在一个实体类中引用另一个实体类的唯一实例,形成一对一的关系。在...

    (3)Hibernate3.2 中的 one-to-one关系

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联是对象关系映射(ORM)中的一个重要概念,它用于表示两个实体之间一对一的映射关系。本篇将深入探讨Hibernate 3.2中的一对一关系,以及如何在实际项目中...

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

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

    Hibernate应用例子one-to-one

    在Hibernate中,"one-to-one"(一对一)关联是一种常见的关系映射类型,表示两个实体之间存在一对一的对应关系,就像一个人只能有一个护照,或者一辆车只能属于一个人一样。 一、一对一关系的配置 1. **注解配置**...

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

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

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

    这篇文章将深入探讨Hibernate中的一对一(One-to-One)唯一外键(Unique Foreign Key)关联映射,尤其是双向关联的实现。这种关联允许在一个实体类中引用另一个实体类,并在另一个实体类中同样设置反向引用,形成...

    nhibernate one-to-meny

    这里,`bag`表示一个集合,`inverse="true"`意味着维护关系的责任在于多方(这里是Employee),`key`定义了关联的外键,`one-to-many`指定了多方的类。 2. **Fluent NHibernate**: 使用Fluent NHibernate,我们...

    hibernate一对一唯一外键关联映射(双向关联)

    在数据库设计中,一对一(One-to-One)关联是一种常见的关系类型,表示两个实体之间存在唯一的对应关系。本篇将深入探讨Hibernate中的一对一唯一外键关联映射,特别是双向关联的实现。 ### 1. 一对一关联概述 一对...

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

    "一对一(One-to-One)"外键关联是Hibernate支持的一种关系映射类型,用于描述两个实体之间一对一的关联关系。这种关系通常存在于具有唯一性的实体之间,例如一个人只有一个身份证,或者一个员工只有一个办公桌。 *...

Global site tag (gtag.js) - Google Analytics