SQL:car_pk_single表的主键为engine_pk_single表主键的外键
create table car_pk_single (
id number(10,0) not null,
name varchar2(15),
serial varchar2(30),
manufacturer varchar2(50),
producedate date,
primary key (id)
);
create table engine_pk_single (
id number(10,0) not null,
model varchar2(20),
manufacturer varchar2(50),
producedate date,
primary key (id)
);
alter table car_pk_single
add constraint fk_car_engine_pk_single
foreign key (id)
references engine_pk_single(id);
POJO:Engine类和Car类都有对方的一个引用(以下为省略写法)
public class Car implements Serializable
{
private Engine engine;
}
public class Engine implements Serializable
{
//这里没有属性Car
... ...
}
XML: Car.hbm.xml Engine.hbm.xml(以下为省略写法)
<hibernate-mapping package="com.allanlxf.hibernate.association.o2o.entity">
<class name="Car" table="car_pk_single" >
<id name="id" column="id" type="integer">
<generator class="foreign">
<param name="property">engine</param>
</generator>
</id>
<one-to-one name="engine" class="Engine" constrained="true" />
</class>
</hibernate-mapping>
<hibernate-mapping package="com.allanlxf.hibernate.association.o2o.entity">
<class name="Engine" table="engine_pk_single" >
<id name="id" column="id" type="integer">
<generator class="native"></generator>
</id>
</class>
</hibernate-mapping>
a) car.setEngine(engine);
session.save(car);
程序将先保存engine到数据库,然后再保存car
b) session.get(Car.class, id),打印sql如下:
select
car0_.id as id0_0_,
car0_.name as name0_0_,
car0_.serial as serial0_0_,
car0_.manufacturer as manufact4_0_0_,
car0_.producedate as produced5_0_0_
from
car_pk_single car0_
where
car0_.id=?
c) 在car.hbm.xml的one-to-one元素中添加outer-join="true", 能得到一个内连接sql。
d) session.delete(car),将只删除car,而不删除engine。
e) 在car.hbm.xml的one-to-one元素中添加cascade="all" ,再执行session.delete(car),则能级联删除engine
one-to-one主键单向关联映射总结: 需对有外键一方的xml文件设置constrained="true"。
若操作涉及到映射关系双方的数据,以操作有外键一方的对象为主(在有级联的情况下);
若操作只涉及到有外键的一方,则只操作这一方对象即可。
分享到:
相关推荐
本篇将重点讲解如何实现一对一主键关联映射的单向关联,并通过一个实际的例子来帮助理解。 在一对一主键关联映射中,两个实体共享同一个主键,这意味着它们在数据库中的记录具有相同的标识符。这种映射关系通常用于...
本主题将深入探讨如何使用Hibernate通过主键来实现一对一的单向关联关系,并提供相关的源码分析。 首先,我们需要理解一对一关联关系的基本概念。在数据库中,一对一关系意味着两个表中的每一条记录都对应另一表中...
2. **单向关联:** 在一对一单向关联中,只有其中一个实体类(称为拥有端)知道另一方实体(称为无拥端)。无拥端实体类没有外键字段或属性指向拥有端。 3. **主键关联:** 在这种关联中,一方实体的主键作为另一方...
2. Hibernate 一对一主键单向关联: 一对一主键关联是通过共享主键实现的,这意味着两个实体类共用同一个主键。在这种情况下,被引用的实体类(如 Address)不再有自己的独立主键生成策略,而是依赖于引用它的实体...
在Java的持久化框架...总结来说,Hibernate的一对一主键关联映射,尤其是双向关联,能有效地简化对象关系的映射,提高代码的可读性和维护性。然而,需要根据实际情况权衡其带来的性能影响,确保系统设计的高效性。
本知识点主要讲解的是使用Hibernate实现一对一主键关联(Primary Key Join)的方式,通过注解进行配置。 一对一的关联在数据库设计中并不常见,但当两个实体之间确实存在一对一的关系时,如用户和其个人资料,这种...
以上介绍的是 Hibernate 中一对一关联关系的三种不同方式,包括一对一连接表单向关联、一对一主键单向关联和一对一外键单向关联。每种关联方式都有其特定的应用场景,选择合适的关联方式对于提高应用程序的性能和可...
本教程将详细解释如何通过代码实现Hibernate的一对一主键关联。 首先,我们需要理解一对一关联的含义:在数据库中,如果一个表的记录只能与另一个表的唯一一条记录对应,这就构成了主键关联的一对一关系。例如,一...
在数据库设计中,一对一主键关联是一种常见的关系模型,它用于表示两个表之间存在一对一的映射关系。这种关系意味着每个表中的记录都只能与另一个表中的唯一一条记录相关联。在本视频教程中,我们将深入探讨一对一...
在一对一主键单向关联中,两个实体共享同一个主键。这种方式通常用于当两个实体之间存在着紧密联系,以至于其中一个实体的生命周期依赖于另一个实体时。 **表结构示例**: - **Person表**: - `personid`: 主键 - ...
本篇将详细讲解如何使用Hibernate进行一对一单向外键关联,并且该关联涉及到联合主键的注解配置。 首先,一对一关联可以分为两种类型:单向和双向。在单向一对一关联中,只有一个实体知道另一个实体的存在,而另一...
在这个场景下,我们将讨论一种特殊的一对一关联方式——唯一外键关联(Single ForeignKey Association),且为单向关联。这种关联方式意味着在一个实体中有一个字段作为另一个实体的主键引用。 首先,我们需要理解...
本篇文章将深入探讨Hibernate中的一对一外键单向关联。 首先,一对一外键关联指的是一个实体通过外键直接引用另一个实体的主键。在单向关联中,只有其中一个实体知道另一个实体的存在,而另一个实体则无感知。这种...
#### 2.1.2 一对一主键单向关联 在这种关联中,两个实体共享相同的主键。配置时,需要在引用实体中设置生成策略,如`identity`或`sequence`。 ```xml ``` #### 2.1.3 一对一连接表单向关联 当两个实体通过第...
通过以上步骤,我们就可以在Hibernate中实现单向一对一主键映射。这个实例中的`hibernate_fifth_one2one_pk_1`文件可能包含了相关的代码示例或测试用例,供你参考和学习。理解并掌握一对一映射是提高Hibernate使用...
在本主题中,我们将深入探讨如何利用Hibernate实现一对一(One-to-One)单向关联关系,并通过源码分析来理解其工作原理。 **一对一关联关系**在数据库设计中表示两个表之间存在唯一的对应关系,例如,一个人可能...
本文将详细解析如何实现一对一唯一外键(Uniquely Foreign Key,UFK)关联映射,特别是在单向关联的情况下的具体操作。 在一对一的关联中,两个实体类之间存在一对一的关系,比如一个用户只有一个身份证,或者一辆...