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

one-to-one关联(主键关联)

阅读更多

1对1主键关键:

如身份证与用户信息,用户ID如果与身份证号码相同的话,那么就能保证用户与身份证的一 一对应关系了。

这里还是以用户与房间为便,当房间号参照用户ID时,那么就实现一 对一关系了。

关键在于如何保证主键相同

1.Customer1类:

public class Customer1 {
	private int customerId;
	private String customerName;
	private Room1 room;
//略去get/set
}

 Room1类:

public class Room1 {
	private int roomId;
	private String roomName;
	private Customer1 customer;
	//略去get/set
}

 2.映射文件

Customer1.hbm.xml

<hibernate-mapping package="org.zengge.hibernate.onetoone.pojo">
	<class name="Customer1" table="customer1">
		<id name="customerId" type="int">
			<generator class="native" />
		</id>
		<property name="customerName" type="string"/>
		<one-to-one name="room" class="Room1"></one-to-one>
	</class>
</hibernate-mapping>

 这个映射文件没什么特别,引入了one-to-one标签,只是指定的相关属性与类

Room1.hbm.xml

<hibernate-mapping package="org.zengge.hibernate.onetoone.pojo">
	<class name="Room1" table="room1">
		<id name="roomId" type="integer">
			<generator class="foreign">
				<param name="property">customer</param>
				<!-- 主键参考customer的主键作外键 -->
			</generator>
		</id>
		<property name="roomName" type="string" ></property>
		<one-to-one name="customer" class="Customer1" constrained="true"></one-to-one>
		<!-- 
			constrained(约束) (可选) 表明该类对应的数据库表,和被关联的对象所对应的数据库表之间,
			通过一个外键引用对主键进行约束。 这个选项影响save()和delete()
			在级联执行时的先后顺序以及 决定该关联能否被委托(也在schema export tool中被使用). 
			
			constrained意义:表room1的主键也是外键,外键引用customer的主键
			相当于加了一个外键约束
		 -->
	</class>
</hibernate-mapping>

 generator类型为foreign,表明主键是参照另一表的主键作外键(既是主键又是外键),param标签用于指定相关联的类的属性名,这里的customer指的是Room1中的属性。

constrained:就是为主键加了一个外键约束,说明room1表的主键既是主键又是外键,这样就能保证customer1与room1中的主键一致,从而实现1对1映射。

 

3.测试

当不添加constrained=true时,导出表

结果为:

create table customer1 (customerId integer not null auto_increment, customerName varchar(255), primary key (customerId))
create table room1 (roomId integer not null, roomName varchar(255), primary key (roomId))

 没有任何约束信息,这样不能保证两张表相关信息主键的一致性。

当添加constrained=true时,导出表

结果为:

create table customer1 (customerId integer not null auto_increment, customerName varchar(255), primary key (customerId))
create table room1 (roomId integer not null, roomName varchar(255), primary key (roomId))
alter table room1 add index FK67A9AB673EA242A (roomId), add constraint FK67A9AB673EA242A foreign key (roomId) references customer1 (customerId)

 表room1表上添加了外键,引用的是customer1表中的主键

这样在添加信息时,就能保存一致性了。

 

保存:

注意,因为room1是引用了customer1的主键,那么只有产生了一个customer1的记录,才能供room1引用。

Session session = HibernateUtils.getSession();
		Transaction tr = session.beginTransaction();
		Room1 room = new Room1();
		room.setRoomName("moon");
		Customer1 customer = new Customer1();
		customer.setCustomerName("sky");
//对于数据库中不存在的cusomer,必须先保存,只有保证了
//cusomer存在,才能存room,否则报错
		room.setCustomer(customer);
		session.save(customer);
		session.save(room);
		
		tr.commit();
 

 

 

 

 

分享到:
评论

相关推荐

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

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

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

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

    Hibernate应用例子one-to-one

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

    Hibernate学习要点_one2one 一对一主键双线关联

    在深入探讨Hibernate中的一对一(One-to-One)主键双线关联机制之前,我们首先需要理解几个核心概念:Hibernate框架、实体关系映射以及主键关联的基本原理。Hibernate是Java平台下的一款开源对象关系映射(ORM)框架...

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

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

    Hibernate-one-to-many

    同时,`Account.hbm.xml`中的`many-to-one`元素将`column`属性设置为`FID`,表示通过`FID`字段关联到`User`实体。 #### 测试场景解释 在测试场景中,我们创建了一个`User`对象和一个`Account`对象,并在`User`对象...

    NHibernate One-to-Many一对多映射-xxlinux_com

    在数据库世界中,一对多(One-to-Many)关系是一种常见的关联类型,其中一个表(父表)可以与多个其他表(子表)相关联。在NHibernate中,配置这种映射关系对于理解和使用ORM至关重要。 一对多关系意味着一个实体...

    hibernate使用主键关联的一对一关系

    在XML映射文件中,可以使用`&lt;one-to-one&gt;`标签来声明这种关系: ```xml &lt;!-- EntityA.hbm.xml --&gt; &lt;one-to-one name="entityB" class="com.example.EntityB" cascade="all" property-ref="entityA"/&gt; ``` ```xml ...

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

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

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

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

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

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

    hibernate 关联映射(一) many to one

    Many-to-One关联是现实世界中常见的关系类型,比如一个学生可以对应多个课程,而一个课程可能被多个学生选修。在数据库中,这通常表现为一对多(One-to-Many)的关系,但在对象模型中,由于我们是从一个对象的角度...

    hibernate中基于外键的one2one

    在Java的持久化框架Hibernate中,一对一(One-to-One)关系映射是一种常见的实体关联方式。基于外键的One-to-One映射是其中的一种实现方式,它通过在一方或双方实体的表中添加外键来建立关联。接下来,我们将深入...

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

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

    Hibernate性能调优

    - `one-to-one`关联通常通过主键进行连接。 - 在某些情况下,将一个大的数据表拆分成多个小的数据表,可以提高数据库操作性能。 - Hibernate默认不支持懒加载的`one-to-one`关联,可能需要通过字节码增强技术实现...

    hibernate中基于主键的one2one

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联是对象关系映射(ORM)中的一个重要概念,它表示两个实体类之间的一种一对一的关系。在这种关系中,一个实体类的实例对应另一个实体类的唯一实例。在...

    hb-04-one-to-many-uni

    标题“hb-04-one-to-many-uni”和描述中的信息看似简洁,但结合标签“Java”,我们可以推测这是一个关于Java编程中的一个特定主题——一对一(One-to-One)、一对多(One-to-Many)关系的统一处理(uni)的示例项目...

    hibernate-one-to-one-uni

    本项目“hibernate-one-to-one-uni”专注于探讨和实现Hibernate框架中的一对一(One-to-One)关系映射,这种关系在数据库设计中比较常见,用于表示两个实体之间一对一的联系。 一对一关系映射在Hibernate中分为两种...

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

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是一种常见的关系数据库模型。本篇将深入探讨在Hibernate中实现一对一主键关联映射的单项关联方式。这种关联意味着两个实体类共享相同的主键,即一个...

    hibernate的关联映射

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

Global site tag (gtag.js) - Google Analytics