如:person与idCard
基于外键的one-to-one可以描述为多对一。
hibernate一对一唯一外键关联映射(双向关联Person<---->IdCard)
一对一唯一外键双向关联,需要在另一端(person),添加<one-to-one>标签,指示hibernate如何加载其关联对象,默认根据主键加载idcard,外键关联映射中,因为两个实体采用的是idcard的外键维护的关系,所以不能指定主键加载idcard,而要根据idcard的外键加载,所以采用如下映射方式:
<one-to-onename="idcard" property-ref="person"/>
id_card表中有一个person_id的外键。
实体类和根据共享主键方式中的一样,不变。
Person.hbm.xml:
<hibernate-mapping>
<class name="cn.framelife.hibernate.entity.Person" table="person" catalog="hibernate">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="45" not-null="true" />
</property>
<!-- 没有下面的one-to-one标签也行,但那样就变成了单向关联(IdCard ----》 Person) ,也就是当知道IdCard后,能找到它属于的对应的人,但知道某人后,却无法找到相对应的IdCard-->
<one-to-one name="idCard" property-ref="person"/>
</class>
</hibernate-mapping>
IdCard.hbm.xml:
<hibernate-mapping>
<class name="cn.framelife.hibernate.entity.IdCard" table="id_card"
catalog="hibernate">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<property name="cardNo" type="java.lang.String">
<column name="card_no" length="45" not-null="true" />
</property>
<!--
指定多的一端的unique=true,这样就限制了多的一端的多重性为一
通过这种手段映射一对一唯一外键关联
-->
<many-to-one name="person" column="person_id" unique="true" />
</class>
</hibernate-mapping>
增加与查询操作和结果都与共享主键方式中是一样的
分享到:
相关推荐
例如,一个人与他的身份证之间就是典型的一对一关系,一个人只有一个身份证号,而一个身份证号也只对应一个人。 2. **外键约束实现一对一**:第一种实现方式是通过外键约束。在Hibernate中,我们可以使用`@OneToOne...
4. **数据库设计范式**:外键关联是实现第三范式(3NF)和更高范式的关键,它有助于减少数据冗余和提高数据一致性。 5. **查询优化**:合理使用外键关联可以提升查询效率。但过度的外键关联可能导致JOIN操作增多,...
在一对一外键单向关联中,两个实体之间通过一个外键字段进行关联。例如,一个人(Person)与一个地址(Address)之间的关联可以通过在`Person`表中添加一个`addressId`字段作为外键来实现。在这个例子中,`Person`...
《关系数据库与SQL语言》第一章练习题涉及到的关系数据库基本概念和关键知识点如下: 1. **实体完整性**:实体完整性是数据库完整性的一种,它要求主键(Primary Key)属性的值不能为空,这是通过定义主键来确保的...
《关系数据库与SQL语言》第一章练习题主要涵盖了数据库的基础概念、数据模型、关系数据库的关键特性以及SQL语言的相关知识。以下是对这些知识点的详细说明: 1. **实体完整性**:实体完整性是关系数据库的一个核心...
15.1 映射一对一关联 15.1.1 按照外键映射 15.1.2 按照主键映射 15.2 映射单向多对多关联 15.3 映射双向多对多关联关系 15.3.1 关联两端使用元素 15.3.2 在inverse端使用元素 15.3.3 使用组件类...
15.1 映射一对一关联 15.1.1 按照外键映射 15.1.2 按照主键映射 15.2 映射单向多对多关联 15.3 映射双向多对多关联关系 15.3.1 关联两端使用元素 15.3.2 在inverse端使用元素 15.3.3 使用组件类...
15.1 映射一对一关联 15.1.1 按照外键映射 15.1.2 按照主键映射 15.2 映射单向多对多关联 15.3 映射双向多对多关联关系 15.3.1 关联两端使用元素 15.3.2 在inverse端使用元素 15.3.3 使用组件类...
15.1 映射一对一关联 15.1.1 按照外键映射 15.1.2 按照主键映射 15.2 映射单向多对多关联 15.3 映射双向多对多关联关系 15.3.1 关联两端使用元素 15.3.2 在inverse端使用元素 15.3.3 使用组件类...
10. **性能考虑**:在设计一对多双向组合关联时,要考虑到查询效率、内存消耗等因素,合理选择关联的映射方式,如是否使用外键,以及关联的fetch策略。 通过以上知识点的学习和实践,开发者可以更好地理解和运用...
16. 公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员,从部门到职员的联系类型是一对多。 17. 现有如下关系:职工(职工号、姓名、性别、职务),部门(部门编号、部门名称、职工号...
例如,@OneToOne 可用于表示一对一关系,@ManyToOne 和 @OneToMany 用于多对一和一对多关系。 4. **外键约束:** 在数据库层面,这些关联通常通过外键实现。Hibernate允许在映射文件或注解中指定外键的生成策略。 ...
- **概念**:在一对多或一对零或多个的关系中,找到具有从属记录的主记录。 - **实现**:通过LINQ查询或导航属性。 **3-6 在查询中设置默认值** - **概念**:当查询结果为空时提供默认值。 - **实现**:使用`...
7. **关联映射**:在Hibernate中,我们可以轻松地处理一对一、一对多、多对一和多对多的关联关系。通过配置文件或注解,可以定义实体间的关联,如外键映射、集合映射等。 8. **延迟加载**(Lazy Loading):为了...
- **1.2.1 映射 Person 类**:通过映射一个具体的 `Person` 类来展示一对一、一对多等关联类型的实现。 - **1.2.2 单向 Set-based 的关联**:解释单向关联的使用场景及其在 Hibernate 中的具体实现。 - **1.2.3 使...
《Hibernate 手册 第一章 Hibernate入门》 Hibernate 是一个开放源码的Java持久化框架,它为Java开发者提供了一种对象关系映射工具来管理Java应用中的关系数据。本章将带你逐步走进Hibernate的世界,了解其基本概念...
2. **一对一关联映射(One-to-One)**:表示两个实体之间唯一的对应关系,例如,一个用户可以有一个唯一的账户,反之亦然。 3. **多对多关联映射(Many-to-Many)**:当两个实体之间的关系不是单一的,而是任意一方...
7.2.2. 一对一(one to one) 7.2.3. 一对多(one to many) 7.3. 使用连接表的单向关联(Unidirectional associations with join tables) 7.3.1. 一对多(one to many) 7.3.2. 多对一(many to one) 7.3.3. ...
这些映射定义了字段之间的对应关系,如主键生成策略、关联关系(一对一、一对多、多对多)等。 4. **会话工厂(SessionFactory)** SessionFactory是线程安全的,负责创建会话实例。它是Hibernate的核心组件,初始...