`
周一Monday
  • 浏览: 346280 次
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate4一对一关系映射(唯一外键方式)

阅读更多

示例:一个人(person) 住一个地址(address),一个地址有一个人。

 

public class Person {

	private Integer id;
	private String name;

	private Address address;

	//getter and setter
}	

 

public class Address {

	private Integer id;
	private String detail;

	private Person person;

	//getter and setter
}

 用XML映射

<hibernate-mapping package="org.monday.hibernate4.domain">
	<class name="Person" table="tbl_person">
		<id name="id">
			<generator class="identity" />
		</id>
		<property name="name" />
		<many-to-one name="address" class="Address" column="address_id" unique="true"/>
	</class>
</hibernate-mapping>

 

<hibernate-mapping package="org.monday.hibernate4.domain">
	<class name="Address" table="tbl_address">
		<id name="id">
			<generator class="identity"/>
		</id>
		<property name="detail" />
		<one-to-one name="person" class="Person" property-ref="address" />
	</class>
</hibernate-mapping>

 1、 tbl_address 表中使用外键来完成一对一关联,限制多方最多只能有一条记录参考到一方,
这是多对一的一个特列。所以设置 <many-to-one> 的 unique 的属性为 true 。
2、 <one-to-one> 的 property-ref 属性 指定引用关联类的属性。

 

用@Annotation映射

@Entity
@Table(name = "tbl_person")
public class Person {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer id;
	private String name;

	@OneToOne
	@JoinColumn(name = "address_id", unique = true)
	private Address address;

	// getter and setter
}	

 

@Entity
@Table(name = "tbl_address")
public class Address {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer id;
	private String detail;

	@OneToOne(mappedBy = "address")
	private Person person;
	
	// getter and setter
}

 测试代码

Person person = new Person();
person.setName("monday");

Address address = new Address();
address.setDetail("shanghai");

person.setAddress(address);
address.setPerson(person);

session.save(person);
session.save(address); 

  SQL schema

Hibernate: 
    alter table tbl_person 
        drop 
        foreign key FKACCC46F65DCD05A8
Hibernate: 
    drop table if exists tbl_address
Hibernate: 
    drop table if exists tbl_person
Hibernate: 
    create table tbl_address (
        id integer not null auto_increment,
        detail varchar(255),
        primary key (id)
    )
Hibernate: 
    create table tbl_person (
        id integer not null auto_increment,
        name varchar(255),
        address_id integer unique,
        primary key (id)
    )
Hibernate: 
    alter table tbl_person 
        add index FKACCC46F65DCD05A8 (address_id), 
        add constraint FKACCC46F65DCD05A8 
        foreign key (address_id) 
        references tbl_address (id)
Hibernate: 
    insert 
    into
        tbl_person
        (name, address_id) 
    values
        (?, ?)
Hibernate: 
    insert 
    into
        tbl_address
        (detail) 
    values
        (?)
Hibernate: 
    update
        tbl_person 
    set
        name=?,
        address_id=? 
    where
        id=?     

 

 

这里多了一条update语句,是因为插入顺序决定的。

若这样

session.save(address); 
session.save(person);

 就不会有update语句了。

分享到:
评论

相关推荐

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

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的...以上就是关于Hibernate一对一唯一外键关联映射(单向关联)的详细说明。通过这种方式,我们可以轻松地在Java应用中处理数据库的一对一关系。

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

    在本案例中,我们将详细探讨“hibernate一对一唯一外键关联映射(单项关联)”。 首先,一对一关联分为两种类型:单向关联和双向关联。单向关联意味着在一个实体类中存在对另一实体的引用,而另一实体类中没有相应...

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

    一、Hibernate一对一关联类型 一对一关联在现实世界中很常见,例如一个人只有一个身份证,一个身份证也只能属于一个人。在数据库设计中,这种关系通常通过主键和外键的方式实现,其中一方的主键作为另一方的外键,...

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

    在本文中,我们将详细介绍Hibernate一对一唯一外键关联映射的概念、配置方法和实践应用。 一对一唯一外键关联映射的概念 在Hibernate中,一对一唯一外键关联映射是指两个实体之间的关联关系,其中一个实体作为外键...

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

    本篇主要探讨的是Hibernate中的一对一(OneToOne)关系映射,特别是唯一外键关联(UniDirectional and Bidirectional Association)的情况。我们将深入理解这种关联方式的配置、实现以及它在实际应用中的价值。 1. ...

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

    本篇将深入探讨Hibernate中的一对一唯一外键关联映射,特别是双向关联的实现。 ### 1. 一对一关联概述 一对一关联意味着一个实体只能与另一个实体的单一实例相关联,这种关系通常出现在两个表之间,其中一个表的...

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

    总结,主键关联和唯一外键关联都是Hibernate实现一对一映射的有效方式,各有优缺点。开发者应根据具体业务需求和数据模型,选择合适的关联策略。理解并熟练运用这些关联映射,对于提升Java后端开发的效率和代码质量...

    hibernate一对一外键关系

    在Hibernate中,实现一对一外键关系有几种方式,包括使用主键关联(Primary Key Association)和使用外键关联(Foreign Key Association)。我们首先来看主键关联: 1. **主键关联**:在这种模式下,一方实体的主键...

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

    在本教程中,我们将深入探讨Hibernate中的一个关键概念——关系映射,特别是“一对一”双向外键关联。这种关联类型在数据库设计中很常见,尤其是在处理具有紧密耦合的实体时。Hibernate作为Java中广泛使用的对象关系...

    Hibernate一对一外键映射

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

    Hibernate教程04_关系映射之一对一单向外键关联

    2. **一对一映射**:使用@OneToOne注解来声明一对一关系。可以设置 mappedBy 属性来指定关联的反向引用字段。 3. **外键实现**:在一对一关系中,外键可以放在任一实体的表中。若外键在从表,称为单向一对一关联;...

    详解Hibernate一对一映射配置

    下面我们将详细讲解如何在Hibernate中进行一对一映射的配置。 **一、XML文件配置** 1. **主键关联(Primary Key Join)** 主键关联是最简单的一对一映射方式,两个实体类共享同一个主键。在XML配置文件中,我们...

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

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联是对象关系映射(ORM)中的一个重要概念,用于表示两个实体之间一对一的关系。在这个场景下,我们将讨论一种特殊的一对一关联方式——唯一外键关联(Single...

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

    单向一对一映射通常涉及一个实体持有另一个实体的引用,而双向一对一映射则意味着两个实体都可以互相引用。这种关联关系在数据库层面通常通过主键外键约束来实现,但在代码层面则通过注解来表达。 首先,我们需要...

    hibernate中的 一对一唯一外键双向关联

    在Java的持久化框架...总之,一对一唯一外键双向关联在Hibernate中提供了强大的对象关系映射能力,但需要谨慎处理,以防止潜在的问题。理解并正确配置这种关联关系对于提升Java应用程序的持久化层设计至关重要。

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

    以上就是关于Hibernate外键实现一对一单向关联关系的详细说明。这个知识点涉及到数据库设计、ORM框架的使用,以及Java编程实践,对于理解和使用Hibernate进行数据库操作具有重要意义。在实践中,应结合具体业务场景...

    hibernate 双向一对一基于外键的关联映射

    在本案例中,我们将探讨如何在Hibernate中实现基于外键的双向一对一关联映射。 首先,我们来看一下双向一对一关联的基本概念。双向一对一关联意味着两个实体类A和B,它们之间存在一对一的关系,并且A能访问B,B也能...

Global site tag (gtag.js) - Google Analytics