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

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" />
		<one-to-one name="address" class="Address" />
	</class>
</hibernate-mapping>

 

<hibernate-mapping package="org.monday.hibernate4.domain">
	<class name="Address" table="tbl_address">
		<id name="id">
			<generator class="foreign">
				<param name="property">person</param>
			</generator>
		</id>
		<property name="detail" />
		<one-to-one name="person" class="Person" constrained="true" />
	</class>
</hibernate-mapping>

1、Address的主键生成策略使用foreign方式,表示通过外键与Person对象共享标识符属性。
2、<one-to-one>标签的constrained属性设置为true,表示约束Address对象的标识符属性值必须与
person属性所对应的持久化对象的标识符属性相同。

 

用@Annotation映射

 

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

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

	@OneToOne
	@PrimaryKeyJoinColumn
	private Address address;

	// getter and setter
}

 

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

	@Id
	@GeneratedValue(generator = "myForeignGenerator")
	@GenericGenerator(name = "myForeignGenerator", 
			strategy = "foreign", 
			parameters = @Parameter(name = "property", value = "person"))
	private Integer id;
	private String detail;

	@OneToOne(optional = false)
	@PrimaryKeyJoinColumn
	private Person person;

	// getter and setter
}	

 

@OneToOne的optional=false表示在address这端添加一个外键约束
@PrimaryKeyJoinColumn定义了一对一关联

 

测试代码

 

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: 
    create table tbl_address (
        id integer not null,
        detail varchar(255),
        primary key (id)
    )
Hibernate: 
    create table tbl_person (
        id integer not null auto_increment,
        name varchar(255),
        primary key (id)
    )
Hibernate: 
    alter table tbl_address 
        add index FKD0C46473E8935A42 (id), 
        add constraint FKD0C46473E8935A42 
        foreign key (id) 
        references tbl_person (id)
Hibernate: 
    insert 
    into
        tbl_person
        (name) 
    values
        (?)
Hibernate: 
    insert 
    into
        tbl_address
        (detail, id) 
    values
        (?, ?)

 

 

分享到:
评论

相关推荐

    Hibernate Annotation 共享主键一对一双向关联

    在一对一的关联关系中,如果两个实体共享同一个主键,那么这种关联被称为共享主键的一对一关联。这意味着这两个实体的表在数据库中通过主键进行连接,一个实体的主键同时也作为另一个实体的外键。 在Hibernate中,...

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

    标题"Hibernate一对一主键关联映射(双向关联)"中的"主键关联"指的是两个实体通过共享相同的主键来建立关联。"双向关联"则意味着在两个实体类中,都可以直接访问到对方的实例,即在实体A中有一个对实体B的引用,...

    Hibernate一对一主键映射

    在这个实例中,我们将深入探讨Hibernate一对一主键映射的概念、配置以及如何通过源代码和测试程序进行实践。 1. **一对一关系理解**: 一对一关系指的是一个实体类中的记录对应另一个实体类中的唯一一条记录。例如...

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

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的关系映射方式之一,尤其在处理两个实体之间存在唯一对应关系时非常有用。本篇将重点讲解如何实现一对一主键关联映射的单向关联,并通过一个...

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

    本篇将深入探讨在Hibernate中实现一对一主键关联映射的单项关联方式。这种关联意味着两个实体类共享相同的主键,即一个实体类的一个实例对应另一个实体类的唯一实例。 首先,我们要明确一对一主键关联映射的基本...

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

    在这个场景中,“hibernate使用主键关联的一对一关系”指的是通过共享主键来实现两个实体类之间的这种一对一绑定。下面我们将深入探讨这一主题。 首先,我们需要理解一对一关系的概念。在数据库中,一对一关系意味...

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

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的关系数据库模型。这篇文章将深入探讨两种主要的一对一关联映射方式:主键关联(Primary Key Join)和唯一外键关联(Foreign Key Join)。我们...

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

    在Java持久化框架Hibernate中,双向一对一(OneToOne)基于主键的关联映射是一种常见的对象关系映射(ORM)技术。这种映射方式允许两个实体类之间建立一对一的关联,且关联是通过主键来实现的。接下来,我们将深入...

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

    在Java的持久化框架Hibernate中,一对一(OneToOne)关联映射是一种常见的关系映射方式,用于表示两个实体之间一对一的关联关系。本示例将深入讲解如何在Hibernate中实现主键一对一关联映射,并通过代码示例进行解析...

    Hibernate教程07_关系映射之一对一双向主键关联

    在本教程中,我们将深入探讨Hibernate中的一个关键概念——关系映射,特别是“一对一双向主键关联”。这种关联类型是数据库设计中的常见模式,它允许两个实体类之间通过共享相同的主键来建立关联。在Java应用中,...

    Hibernate教程06_关系映射之一对一单向主键关联

    4. **配置一对一关系映射:** 在Hibernate中,可以使用`@OneToOne`注解来声明一对一关联,并通过`@PrimaryKeyJoinColumn`注解指定主键关联的列。在拥有端实体中,可以直接使用这个注解,而在无拥端则不需要任何额外...

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

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联关系是常见的一种实体关系映射。本主题将深入探讨如何使用Hibernate通过主键来实现一对一的单向关联关系,并提供相关的源码分析。 首先,我们需要理解一对...

    详解Hibernate一对一映射配置

    主键关联是最简单的一对一映射方式,两个实体类共享同一个主键。在XML配置文件中,我们可以在任意一方的实体类中声明`&lt;one-to-one&gt;`标签,例如: ```xml &lt;!-- Address的其他属性 --&gt; ```...

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

    -- 注意:没有与Person的一对一映射配置,因为是单向关联 --&gt; &lt;!-- 其他属性映射 --&gt; &lt;/hibernate-mapping&gt; ``` 这里的`one-to-one`标签定义了与`IdentityCard`的关联,并通过`foreign-key`属性指定了外键名。 ...

    Hibernate 关联关系映射分类

    综上所述,Hibernate提供了丰富的关联关系映射机制,包括一对一、一对多和多对多关联,每种关联又可以细分为单向和双向,以及基于主键和基于外键的不同实现方式。正确理解和选择合适的关联关系对于构建高效、可维护...

Global site tag (gtag.js) - Google Analytics