`

Hibernate:一对一双向主键关联

阅读更多
参考资料:
Hibernate系列:映射一对一主键双向关联
http://blog.csdn.net/igoder/archive/2009/06/23/4292166.aspx
Hibernate一对一主键双向关联映射(Annotation配置)
http://www.blogjava.net/sxyx2008/archive/2010/10/14/335093.html
Hibernate 一对一主键双向关联

一 环境:W7+Eclipse3.6+JDK1.6+MySQL
二 所用Hibernate版本:hibernate-distribution-3.6.0
三 具体代码
hibernate一对一双向指的是2个对象都可以互相的调用,双向的配置可以方便我们调用对象。比如知道A对象就可以使用B对象,可以调用B对象就可以使用A对象。

Hibernate映射一对一双向关联总结: 只需对有外键一方的xml文件设置constrained="true"即可。
若操作涉及到映射关系双方的数据,以操作没有外键一方的对象为主(因为有级联);
若操作只涉及到有外键的一方,则只操作这一方对象即可。

1 Annotations版本

主导对象
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;

@Entity
public class A {
	private int id;
	private String name;
	private B b;

	@Id
	@GeneratedValue
	public int getId() {
		return id;
	}
	
	public String getName() {
		return name;
	}

	@OneToOne
	@PrimaryKeyJoinColumn
      	public B getB() {
		return b;
	}
	public void setId(int id) {
		this.id = id;
	}
	public void setName(String name) {
		this.name = name;
	}
	public void setB(B b) {
		this.b = b;
	}
	
}

被参考对象
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;

@Entity
public class B{
	private int id;
	private String name;

	private A a ;
	
	@OneToOne
	@PrimaryKeyJoinColumn
	public A getA() {
		return a;
	}


	public void setA(A a) {
		this.a = a;
	}

	

	@Id
	@GeneratedValue
	public int getId() {
		return id;
	}
	
	public String getName() {
		return name;
	}

	
	public void setId(int id) {
		this.id = id;
	}
	public void setName(String name) {
		this.name = name;
	}	
}


XML版本
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
	 <class name="org.hibernate.model.A">
        <id name="id" column="id">
           <!-- <generator class="native"/> -->
<!-- class="foreign": 一对一主键映射中,使用另外一个相关联的对象的标识符 -->
            <generator class="foreign">   
                <param name="property">b</param>   
           </generator>   

        </id>
        <property name="name"/>
<!-- 表示在B表存在一个外键约束,外键参考相关联的表person -->
	<one-to-one name="b" constrained="true"></one-to-one>
    </class>
</hibernate-mapping>


<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
	 <class name="org.hibernate.model.B">
        <id name="id" column="id">
            <generator class="native"/>
        </id>
        <property name="name"/>	   
	<one-to-one name="a" property-ref="b"></one-to-one>
    </class>
</hibernate-mapping>

SQL
create table A (
        id integer not null auto_increment,
        name varchar(255),
        bId integer unique,
        primary key (id)
)

create table B (
        id integer not null auto_increment,
        name varchar(255),
        primary key (id)
)

 alter table A 
        add index FK418DB1FDB2 (id), 
        add constraint FK418DB1FDB2 
        foreign key (id) 
        references B (id)

分享到:
评论

相关推荐

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

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

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

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

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

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

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

    本文将详细讲解“Hibernate Annotation 中的共享主键一对一双向关联”。 首先,我们需要理解什么是共享主键(Shared Primary Key)。在一对一的关联关系中,如果两个实体共享同一个主键,那么这种关联被称为共享...

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

    在实际开发中,使用IDEA等集成开发环境可以自动生成一对一双向关联的实体类和映射文件,方便快捷。同时,通过数据库管理工具如MySQL Workbench,可以直观地查看表结构和外键约束,帮助理解一对一关联的实际效果。 ...

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

    在Java的持久化框架...总结来说,Hibernate的一对一主键关联映射,尤其是双向关联,能有效地简化对象关系的映射,提高代码的可读性和维护性。然而,需要根据实际情况权衡其带来的性能影响,确保系统设计的高效性。

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

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

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

    本主题将深入探讨如何使用Hibernate实现一对一双向关联关系,并通过源码解析这一过程。 一对一双向关联关系指的是两个实体类之间存在一对一的关系,且在各自的类中都可以直接访问对方。这种关联可以通过注解或XML...

    hibernate一对一主键关联代码实现

    本教程将详细解释如何通过代码实现Hibernate的一对一主键关联。 首先,我们需要理解一对一关联的含义:在数据库中,如果一个表的记录只能与另一个表的唯一一条记录对应,这就构成了主键关联的一对一关系。例如,一...

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

    在Hibernate中,一对一的主键关联关系可以通过以下几种方式配置: 1. **注解配置**: 使用`@OneToOne`注解来声明一对一关系,同时通过`@PrimaryKeyJoinColumn`注解指定共享的主键列。例如: ```java @Entity ...

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

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

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

    总结来说,Hibernate中的一对一主键关联映射允许两个实体共享同一个主键,实现单向关联时只需在依赖方添加对另一方的引用。在实际应用中,应根据业务需求谨慎选择关联类型,以确保数据的完整性和一致性。

    hibernate一对一主键关联(注解版)

    本知识点主要讲解的是使用Hibernate实现一对一主键关联(Primary Key Join)的方式,通过注解进行配置。 一对一的关联在数据库设计中并不常见,但当两个实体之间确实存在一对一的关系时,如用户和其个人资料,这种...

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

    本主题将深入探讨如何使用Hibernate通过主键来实现一对一的单向关联关系,并提供相关的源码分析。 首先,我们需要理解一对一关联关系的基本概念。在数据库中,一对一关系意味着两个表中的每一条记录都对应另一表中...

    hibernate一对一关联关系

    本资源主要探讨的是“hibernate一对一关联关系”。 一对一关联关系在现实世界中很常见,比如一个人只有一个身份证,或者一个公司的总部只有一个。在Hibernate中,设置一对一关联关系可以帮助我们更好地管理和操作...

    hibernate关联关系之一对一双向关联

    在Java持久化框架Hibernate中,一对一双向关联是一种常见的实体关系映射,它反映了数据库中的两个表之间一对一的对应关系。这种关联关系可以是单向的,也可以是双向的,而这里的"hibernate关联关系之一对一双向关联...

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

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

    hibernate表之间3种双向关联映射

    总结来说,Hibernate中的双向关联映射是对象关系映射的重要组成部分,包括双向多对多、双向一对多和双向一对一。理解并熟练运用这些映射方式,有助于开发者更好地实现Java应用程序与数据库间的交互,提高开发效率和...

    hibernate03:多对一单向关联、多对一双向关联

    本文主要探讨的是Hibernate中的两种关联关系:多对一单向关联和多对一双向关联。通过理解这两种关联方式,我们可以更好地设计和实现复杂的数据库模型。 首先,我们来看**多对一单向关联**。这种关联意味着一个实体...

Global site tag (gtag.js) - Google Analytics