`

Hibernate关系处理之一对一

阅读更多

在实际的处理问题中, 一对一的关系我们可以将其看做是一个一对多的特例. 将多放限制一下, 只能有一个实例即可.

现实生活中, 一个ip地址是可以指派给不同的电脑, 但是同时只能有一个电脑在使用此地址.示例如下:

public class Comp implements java.io.Serializable {

	private Integer comid;
	private Ipaddr ipaddr;
 
	public Comp() {
	}
	public Integer getComid() {
		return this.comid;
	}
	public void setComid(Integer comid) {
		this.comid = comid;
	}
	public Ipaddr getIpaddr() {
		return this.ipaddr;
	}
	public void setIpaddr(Ipaddr ipaddr) {
		this.ipaddr = ipaddr;
	}
}

 

public class Ipaddr implements java.io.Serializable {
	private Integer id;
	private String ipaddr;
	private Comp comp ;
	public Ipaddr() {
	}
	public Integer getId() {
		return this.id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getIpaddr() {
		return this.ipaddr;
	}
	public void setIpaddr(String ipaddr) {
		this.ipaddr = ipaddr;
	}
	public Comp getComp() {
		return comp;
	}
	public void setComp(Comp comp) {
		this.comp = comp;
	}	
}

 

我们可以看出, 一台电脑配置一个ip地址, 或者说一个ip地址同时只能指派给一台电脑.

 

xml配置文件如下.

 

<class name="Comp" table="comp" catalog="hibernate">
   <id name="comid" type="java.lang.Integer">
        <column name="comId" />
         <generator class="increment" />
   </id>

    <many-to-one name="ipaddr" cascade="save-update" class="Ipaddr" fetch="select" >
      <column name="ipaddr" not-null="true" unique="true" />
   </many-to-one>
</class>

 上面可以看出, 电脑和ip地址是可以单独存在的两个实体. 一个ip地址可以指派给多台电脑. 但是多方Comp却在column属性中加入了unique和notnull约束.

   <many-to-one name="ipaddr" cascade="save-update" class="Ipaddr" fetch="select" >

          <column name="ipaddr" not-null="true" unique="true" />

   </many-to-one>

 

我们再看看一方的配置

<class name="Ipaddr" table="ipaddr" catalog="hibernate" >
     <id name="ipaddrId" type="java.lang.Integer">
          <column name="ipaddr_id" length="10" />
          <generator class="increment" />
          </id>
          <one-to-one name="comp" class="Comp" cascade="all" property-ref="ipaddr"></one-to-one>
</class>

 在这个一对一的例子中需要确定一点, 谁是主, 谁是子.

主方配置<one-to-one name="comp" class="Comp" cascade="all" property-ref="ipaddr" ></one-to-one>

子方配置<many-to-one name="ipaddr" class="Ipaddr" cascade="save-update" fetch="select">

  <column name="ipaddr" not-null="true" unique="true" />

</many-to-one>

 

还有一种一对一的关系. 子方的外键还做子方的主键. 如一个设备激活的时候需要一个激活码,而这个激活码只能供一个设备使用一次,该设备被激活码激活绑定后就不能再被其他的激活码激活绑定.

 

public class Equipment implements java.io.Serializable {
                 private Integer eacId;
                private EACard EACard;

	public EACard getEACard() {
		return this.EACard;
	}

	public void setEACard(EACard EACard) {
		this.EACard = EACard;
	}

}

 

 

public class EACard implements java.io.Serializable {

                private Equipment equipment;
                private Integer eacId;
	public Equipment getEquipment() {
		return this.equipment;
	}

	public void setEquipment(Equipment equipment) {
		this.equipment = equipment;
	}
}

 

从上面的java类中可以看出, 每个eac都有一个eacId标识. 并且每个设备激活码都有一个设备属性. 所以设备激活码是主方. 设备时子方.

 

<class name="EACard" table = "eacard" catalog="hibernate" >

     <id name="eacard" type = "java.lang.Integer">
         <column name="eacard" length=15/>
          <generator class="increment"/>
    </id>

   <one-to-one name="equipment" class="Equipment" lazy="proxy">
</one-to-one>
</class>

 

<class name="Equipment" table="equipment" catalog="hibernate">
    <id name="eaCard" type="integer">
          <column name="eacard" />
          <generator class="foreign">
           <param name="property">eaCard</param>
          </generator>
     </id>

    <one-to-one name="eaCard" class="EACard" constraint="true" lazy="proxy" ></one-to-one>
</class>

 

在有外键的一方增加constraint="true"属性.

分享到:
评论

相关推荐

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

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

    Hibernate一对一,一对多,多对多实例

    本实例将深入探讨Hibernate中的三种基本关联关系:一对一(One-to-One)、一对多(One-to-Many)以及多对多(Many-to-Many)的实现方式。 1. **一对一关联**: 一对一关联通常出现在两个实体之间存在唯一对应关系...

    Hibernate ORM - 一对一连接表关联关系

    10. **性能优化**: 在处理一对一关联时,需要注意避免N+1查询问题,通过合理使用JOIN查询或批处理可以提升性能。 **文件名称分析** "HibernateORM"这个文件名可能是包含示例代码、配置文件或教程文档的压缩包,...

    hibernate anotation 处理一对多关系

    在处理一对多关系时,Hibernate Annotation提供了便捷的方式来表达实体之间的关联。本文将以一个实例为依托,深入解析如何使用注解来设置一对多关系以及多对一关系的映射。 在Hibernate中,处理一对多关系主要使用`...

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

    在保存或更新实体时,Hibernate会自动处理一对一关联的外键维护。 6. **懒加载与立即加载**:在一对一关系中,可以设置fetch属性来控制关联对象的加载策略,如懒加载(延迟加载)和立即加载。 7. **级联操作**:...

    hibernate一对一的两种实现方式

    在Hibernate中,`OneToOne`关系的处理主要涉及到`org.hibernate.mapping.OneToOne`类,它继承自`org.hibernate.mapping.Association`,负责维护一对一关联的元数据。在建立会话时,Hibernate会根据这些元数据生成SQL...

    Hibernate一对一关系源码

    - `org.hibernate.persister.entity.OneToOnePersister`:这是Hibernate处理一对一关系的具体持久化类,它继承自`AbstractSingleTableEntityPersister`,负责生成并执行SQL语句。 - `org.hibernate.event.internal...

    Hibernate一对一,多对一关系源码

    本篇文章将深入探讨Hibernate中的一对一(OneToOne)和多对一(ManyToOne)关系的源码实现。 **一对一(OneToOne)关系** 在现实生活中,一对一是指两个实体之间存在唯一的关系,例如一个人可能只有一张身份证。在...

    Hibernate一对一

    作者通过在博客中分享,详细讲解了如何在Java应用程序中使用Hibernate实现对象关系映射时的一对一关联,并可能涉及到实体类的设计、配置文件的编写以及相关的API使用。 **标签:“源码 工具”** **知识点详解:** ...

    hibernate一对多项目

    本项目“hibernate一对多项目”旨在演示如何在JavaWeb应用中使用Hibernate处理一对多的关系映射。这里我们将深入探讨 Hibernate 的一对多关系、配置以及在实际项目中的应用。 首先,一对多关系在数据库中很常见,...

    JavaEE学习笔记之Hibernate表关系之一对多(inverse详解)

    1. **关联的插入和更新**:在一对多关系中,如果设置`inverse="true"`,那么在保存或更新父实体时,Hibernate会自动处理与子实体的关联,添加新的子实体或更新已存在的关联。相反,如果在子实体上操作,Hibernate将...

    hibernate 一对一 多对多的关系

    例如,在处理上述的一对一和多对多关系时,Hibernate会根据注解自动处理关联的建立和删除。通过阅读源码,你可以了解这些过程的细节,这对于优化性能和解决复杂问题非常有帮助。 至于**工具应用**,Hibernate提供了...

    Hibernate关系映射

    "多对一"关系映射是Hibernate支持的四种基本关联类型之一,包括一对一、一对多、多对一和多对多。本篇将深入探讨“多对一”关系映射的概念、配置以及在实际web系统中的应用。 **一、“多对一”关系映射概念** 在...

    Hibernate 关联关系解除

    本文将深入探讨Hibernate中的关联关系解除,包括一对多、多对一、一对一以及多对多关系的解除,以及如何通过源码理解和使用相关工具进行操作。 一、Hibernate关联关系介绍 在Hibernate中,关联关系主要包括以下几种...

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

    **标题详解:**“Hibernate ORM - 一对一外键关联关系” 在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者用面向对象的方式处理数据库操作,从而减少与SQL的直接交互。"一对一(One-...

    Hibernate的多对一和一对多操作实例

    总之,Hibernate的多对一和一对多操作不仅提供了灵活的关联管理,还允许开发者将复杂的数据关系逻辑封装在应用程序中,从而简化数据库设计,提高代码的可读性和可维护性。然而,这也要求开发者对Hibernate的映射机制...

    Hibernate ORM - 一对多双向关联关系

    标题“Hibernate ORM - 一对多双向关联关系”指的是在数据库建模中,Hibernate ORM(对象关系映射)框架如何处理一个实体类(如User)与多个实体类(如Article)之间的关系。在这种关系中,一个用户可以拥有多个文章...

    Hibernate 一对一

    深入理解 Hibernate 一对一映射的实现原理,需要阅读 Hibernate 源码,了解其如何生成 SQL 以及如何处理关联对象的加载和更新。 **总结** Hibernate 的一对一映射是 ORM 设计中的重要部分,它使得数据访问更加便捷...

    hibernate实例(一对多,多对一)

    在这个“hibernate实例(一对多,多对一)”的主题中,我们将深入探讨两种重要的关联关系:一对一(One-to-One)和一对多(One-to-Many)。 **一对一关联(One-to-One)** 在一对一关联中,一个实体与另一个实体之间...

    hibernate关系映射多对多关系

    综上所述,这个压缩包提供了关于Hibernate关系映射的全面教程,包括多对多、一对一和一对多的关系配置,以及如何在Spring+Hibernate+Struts环境中应用这些关系。对于想要深入理解Hibernate并提升开发效率的Java...

Global site tag (gtag.js) - Google Analytics