`

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

阅读更多
一对一关联映射有两种:一种是主键关联,一种是“唯一”外键关联。
主键关联:原理是两张表的主键(ID)保持一致,在获取的时候根据两种表中的ID相同来作为关系判断的标准,这样的设计好处在于我们不用添加另外的字段来维护它们之间的关系。
废话少说,看例子。
在生活一对一的关系还“算”挺多的,比如人与自己的省份证,丈夫和妻子(当然是在符合中国国情的情况下)等等。
第一步:建立两张表。
TABLE:husband
create table husband(
h_id int primary key,
h_name varchar(20)
);

TABLE:wife
create table wife(
w_id int primary key,
w_name varchar(20)
);

注意:这两张表没有使用外键来关联它们。
第二步:建立PO对象。
JAVA PO :HusbandPO.java
package com.lovo.po;
public class HusbandPO {
  private int id;
	
  private String name;
	
  private WifePO myWife; //注意包含了一个妻子对象

  ... other getXX setXX ...
}

JAVA PO :WifePO.java
package com.lovo.po;
public class WifePO {
  private int id;
	
  private String name;
	
  private HusbandPO myHus; //注意包含了一个丈夫对象

  ... other getXX setXX ...
}

第三步:在XX.hbm.xml中配置PO对象属性与数据库表字段的映射。
HusbandPO.hbm.xml

 <hibernate-mapping>
	<!-- 主控方 -->
	<class name="com.lovo.po.HusbandPO" table="husband">
		<id name="id" column="h_id" type="int">
			<generator class="increment"></generator>
		</id>
		<property name="name" column="h_name" type="string"></property>
		<!-- cascade的作用是当本身发生修改的时候,会级联的修改从表 -->
		<one-to-one name="myWife" class="com.lovo.po.WifePO" cascade="all"></one-to-one>
	</class>
</hibernate-mapping>

WifePO.hbm.xml

 <hibernate-mapping>
	<class name="com.lovo.po.WifePO" table="wife" >
		<id name="id" column="w_id" type="int">
			<generator class="foreign">
				<!-- 引用husband表的主键 -->
				<param name="property">myHus</param>
			</generator>
		</id>
		<property name="name" column="w_name" type="string"></property>
		<one-to-one name="myHus" class="com.lovo.po.HusbandPO"  cascade="all"></one-to-one> 
	</class>
</hibernate-mapping>


唯一外键映射:记住是“唯一”,因为一对一是多对一的一种特例,且在hibernate-mapping中是利用<many-to-one>来表示,这个时候需要指明该标签的unique="true",这才算是一对一,否则就是多对一。
例子还是使用上面的一一制夫妻关系。
第一步:只需要在两张表的其中一张中加上一个外键,我这里在wife身上加(没有别的意思 )。
TABLE:husband
create table husband(
h_id int primary key,
h_name varchar(20)
);

TABLE:wife
create table wife(
w_id int primary key,
w_name varchar(20),
fk_hus_id int foreign key(fk_hus_id) 
references husband(h_id)
);

第二步:上面是写PO ,这里也不例外,不过PO对象没有改变过哈,这里不复写了。
第三步:XX.hbm,xml配置,配置与上面有所区别,注意啦……
HusbandPO.hbm.xml
<hibernate-mapping> 
	<class name="com.lovo.po.HusbandPO" table="husband">
		<id name="id" column="h_id" type="int">
			<generator class="increment"></generator>
		</id>
		<property name="name" column="h_name" type="string"></property> 
		<one-to-one name="myWife" class="com.lovo.po.WifePO"
		property-ref="myHus" cascade="all"></one-to-one>
		<!-- property-ref 被关联到此外键的类中的对应属性的名字,若没指定,使用被关联类的主键.由于这里是唯一外键关联,所以一般要设置这里。(这里相当于是在说我妻子的老公是我,从而我妻子的结婚证编号和我的结婚证编号是一样的)  -->
	</class>
</hibernate-mapping>


WifePO.hbm.xml
<hibernate-mapping>
	<class name="com.lovo.po.WifePO" table="wife" >
		<id name="id" column="w_id" type="int">
			<!-- 注意!这里的ID不在是引用husband表的ID了 -->
			<generator class="increment"></generator>
		</id>
		<property name="name" column="w_name" type="string"></property>
		<many-to-one name="myHus" class="com.lovo.po.HusbandPO"  cascade="all"
		unique="true" column="fk_hus_id"></many-to-one> 
		<!-- 这里是要表示一对一所以“unique="true"”是不可缺少的。column指明数据库表的外键字段 -->
	</class>
</hibernate-mapping>
2
3
分享到:
评论

相关推荐

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

    唯一外键关联映射时,外键字段在数据库中设置为主键约束,确保每个值都是唯一的,这样就能保证一对一的关系。 ### 2. 创建实体类 假设我们有两个实体类,`Person` 和 `IdCard`,其中 `Person` 拥有一个 `IdCard` ...

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

    在Hibernate中,一对一关联可以通过配置XML映射文件或使用注解来实现。这里我们将使用注解方式进行说明。首先,我们需要在两个实体类中分别定义对应的属性,并使用`@OneToOne`注解来指定关联关系。 1. 实体类A: ``...

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

    一对一关联分为两种:基于主键的关联(Primary Key Association)和基于外键的关联(Foreign Key Association)。在基于主键的关联中,两个实体共享相同的主键,而在基于外键的关联中,一方实体的主键作为另一方实体...

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

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

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

    - **唯一性约束**:在数据库层面,为了确保一对一关联,通常需要添加唯一性约束。例如,`IdCard`表的`person_id`列应具有唯一性约束。 以上就是关于Hibernate中一对一主键关联映射(单项关联)的详细解释。通过这种...

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

    虽然一对一关联提供了便利,但过度使用可能会增加数据库查询复杂性,影响性能。因此,合理设计数据模型和关联关系,结合缓存策略,才能实现高性能的持久化操作。 总结来说,Hibernate的一对一主键关联映射,尤其是...

    Hibernate双向一对一关联映射(注解版)

    本主题聚焦于“Hibernate双向一对一关联映射”的注解实现,这是一种高级的数据库设计模式,用于处理两个实体之间一对一的关系。 在Hibernate中,一对一关联映射分为单向和双向。单向一对一映射通常涉及一个实体持有...

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

    - 在一对一关联中,唯一外键关联是指在一个实体中定义了另一个实体的主键作为其字段,形成外键约束,确保了数据的一致性和完整性。 3. **双向关联与单向关联** - **单向关联**:只有一方知道另一方的存在,例如...

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

    在一对一关联中,如果使用唯一外键关联,那么一个实体的主键将作为另一实体的外键,同时这个外键在该实体内必须是唯一的。这可以通过在关联字段上使用`@OneToOne`注解并指定`@JoinColumn`来实现。 ### 3. 双向关联 ...

    Hibernate一对一单向外键关联 (联合主键annotation)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联是常见的关系映射类型,它用于表示两个实体之间存在唯一的对应关系。本篇将详细讲解如何使用Hibernate进行一对一单向外键关联,并且该关联涉及到联合主键的...

    hibernate主键一对一关联映射代码示例

    本示例将深入讲解如何在Hibernate中实现主键一对一关联映射,并通过代码示例进行解析。 一对一关联意味着在一个实体中,每个实例都唯一对应另一个实体的实例。这种关联可以通过共享主键(primary key)或外键...

    Hibernate一对一外键映射

    **标题:Hibernate一对一外键映射** 在关系型数据库中,一对一(One-to-One)关联是一种常见的关系,它表示两个实体之间存在着唯一的关系。Hibernate,作为Java领域中的一个流行的ORM(对象关系映射)框架,提供了...

    Hibernate一对多主键关联映射源代码

    在标题中的"一对多主键关联映射",意味着我们将使用主键作为关联的依据,而不是外键。这种方式通常用于两个实体类中,一个实体类的主键同时也是另一个实体类的字段。 假设我们有两个实体类:`Student`(学生)和`...

    Hibernate教程05_关系映射之一对一双向外键关联

    在Hibernate中,一对一关联的配置主要通过注解或XML配置文件完成。对于双向关联,我们需要在两个实体类中分别设置相应的属性和关联注解。 在实体类A中,我们将添加一个类型为B的属性,并使用`@OneToOne`注解来指定...

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

    在这个场景下,我们将讨论一种特殊的一对一关联方式——唯一外键关联(Single ForeignKey Association),且为单向关联。这种关联方式意味着在一个实体中有一个字段作为另一个实体的主键引用。 首先,我们需要理解...

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

    **一对一关联关系**在数据库设计中表示两个表之间存在唯一的对应关系,例如,一个人可能只有一个护照,或者一个员工只有一个职位。在Hibernate中,这种关系可以通过外键(Foreign Key)在一方或双方实体中实现。 **...

Global site tag (gtag.js) - Google Analytics