在实际的处理问题中, 一对一的关系我们可以将其看做是一个一对多的特例. 将多放限制一下, 只能有一个实例即可.
现实生活中, 一个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中的一个关键概念——关系映射,特别是“一对一”双向外键关联。这种关联类型在数据库设计中很常见,尤其是在处理具有紧密耦合的实体时。Hibernate作为Java中广泛使用的对象关系...
本实例将深入探讨Hibernate中的三种基本关联关系:一对一(One-to-One)、一对多(One-to-Many)以及多对多(Many-to-Many)的实现方式。 1. **一对一关联**: 一对一关联通常出现在两个实体之间存在唯一对应关系...
10. **性能优化**: 在处理一对一关联时,需要注意避免N+1查询问题,通过合理使用JOIN查询或批处理可以提升性能。 **文件名称分析** "HibernateORM"这个文件名可能是包含示例代码、配置文件或教程文档的压缩包,...
在处理一对多关系时,Hibernate Annotation提供了便捷的方式来表达实体之间的关联。本文将以一个实例为依托,深入解析如何使用注解来设置一对多关系以及多对一关系的映射。 在Hibernate中,处理一对多关系主要使用`...
在保存或更新实体时,Hibernate会自动处理一对一关联的外键维护。 6. **懒加载与立即加载**:在一对一关系中,可以设置fetch属性来控制关联对象的加载策略,如懒加载(延迟加载)和立即加载。 7. **级联操作**:...
在Hibernate中,`OneToOne`关系的处理主要涉及到`org.hibernate.mapping.OneToOne`类,它继承自`org.hibernate.mapping.Association`,负责维护一对一关联的元数据。在建立会话时,Hibernate会根据这些元数据生成SQL...
- `org.hibernate.persister.entity.OneToOnePersister`:这是Hibernate处理一对一关系的具体持久化类,它继承自`AbstractSingleTableEntityPersister`,负责生成并执行SQL语句。 - `org.hibernate.event.internal...
本篇文章将深入探讨Hibernate中的一对一(OneToOne)和多对一(ManyToOne)关系的源码实现。 **一对一(OneToOne)关系** 在现实生活中,一对一是指两个实体之间存在唯一的关系,例如一个人可能只有一张身份证。在...
作者通过在博客中分享,详细讲解了如何在Java应用程序中使用Hibernate实现对象关系映射时的一对一关联,并可能涉及到实体类的设计、配置文件的编写以及相关的API使用。 **标签:“源码 工具”** **知识点详解:** ...
本项目“hibernate一对多项目”旨在演示如何在JavaWeb应用中使用Hibernate处理一对多的关系映射。这里我们将深入探讨 Hibernate 的一对多关系、配置以及在实际项目中的应用。 首先,一对多关系在数据库中很常见,...
1. **关联的插入和更新**:在一对多关系中,如果设置`inverse="true"`,那么在保存或更新父实体时,Hibernate会自动处理与子实体的关联,添加新的子实体或更新已存在的关联。相反,如果在子实体上操作,Hibernate将...
例如,在处理上述的一对一和多对多关系时,Hibernate会根据注解自动处理关联的建立和删除。通过阅读源码,你可以了解这些过程的细节,这对于优化性能和解决复杂问题非常有帮助。 至于**工具应用**,Hibernate提供了...
"多对一"关系映射是Hibernate支持的四种基本关联类型之一,包括一对一、一对多、多对一和多对多。本篇将深入探讨“多对一”关系映射的概念、配置以及在实际web系统中的应用。 **一、“多对一”关系映射概念** 在...
本文将深入探讨Hibernate中的关联关系解除,包括一对多、多对一、一对一以及多对多关系的解除,以及如何通过源码理解和使用相关工具进行操作。 一、Hibernate关联关系介绍 在Hibernate中,关联关系主要包括以下几种...
**标题详解:**“Hibernate ORM - 一对一外键关联关系” 在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者用面向对象的方式处理数据库操作,从而减少与SQL的直接交互。"一对一(One-...
总之,Hibernate的多对一和一对多操作不仅提供了灵活的关联管理,还允许开发者将复杂的数据关系逻辑封装在应用程序中,从而简化数据库设计,提高代码的可读性和可维护性。然而,这也要求开发者对Hibernate的映射机制...
标题“Hibernate ORM - 一对多双向关联关系”指的是在数据库建模中,Hibernate ORM(对象关系映射)框架如何处理一个实体类(如User)与多个实体类(如Article)之间的关系。在这种关系中,一个用户可以拥有多个文章...
深入理解 Hibernate 一对一映射的实现原理,需要阅读 Hibernate 源码,了解其如何生成 SQL 以及如何处理关联对象的加载和更新。 **总结** Hibernate 的一对一映射是 ORM 设计中的重要部分,它使得数据访问更加便捷...
在这个“hibernate实例(一对多,多对一)”的主题中,我们将深入探讨两种重要的关联关系:一对一(One-to-One)和一对多(One-to-Many)。 **一对一关联(One-to-One)** 在一对一关联中,一个实体与另一个实体之间...
综上所述,这个压缩包提供了关于Hibernate关系映射的全面教程,包括多对多、一对一和一对多的关系配置,以及如何在Spring+Hibernate+Struts环境中应用这些关系。对于想要深入理解Hibernate并提升开发效率的Java...