SQL:C_E_JOIN_SINGLE为中间表
create table car_join_single (
id number(10,0) not null,
name varchar2(15) not null,
serial varchar2(30) not null,
manufacturer varchar2(50) not null,
producedate date,
primary key (id)
);
create table c_e_join_single(
cid number(10,0) not null,
eid number(10,0) not null unique,
primary key (cid)
);
create table engine_join_single (
id number(10,0) not null,
model varchar2(20) not null,
manufacturer varchar2(50) not null,
producedate date,
primary key (id)
);
alter table C_E_JOIN_SINGLE
add constraint FK_CAR_JOIN_SINGLE foreign key (CID)
references CAR_JOIN_SINGLE (ID);
alter table C_E_JOIN_SINGLE
add constraint FK_ENGINE_JOIN_SINGLE foreign key (EID)
references ENGINE_JOIN_SINGLE (ID);
POJO:Car类有Engine类的一个引用(以下为省略写法)
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_join">
<id name="id" column="id" type="integer">
<generator class="native" />
</id>
<join table="c_e_join_single">
<key column="cid"
unique="true"/>
<many-to-one name="engine"
column="eid"
not-null="true"
unique="true"
fetch="join" />
</join>
</class>
</hibernate-mapping>
<hibernate-mapping package="com.allanlxf.hibernate.association.o2o.entity">
<class name="Engine" table="engine_join_single">
<id name="id" column="id" type="integer">
<generator class="native"/>
</id>
</class>
</hibernate-mapping>
a) 先保存其中一方得到那一方的id,然后再set并保存另一方
session.save(engine);
car.setEngine(engine);
session.save(car);
b) session.get(Car.class, id),将得到一个外连接的sql,如下:
select
car0_.id as id0_1_,
car0_.name as name0_1_,
car0_.serial as serial0_1_,
car0_.manufacturer as manufact4_0_1_,
car0_.producedate as produced5_0_1_,
car0_1_.eid as eid1_1_,
engine1_.id as id2_0_,
engine1_.model as model2_0_,
engine1_.manufacturer as manufact3_2_0_,
engine1_.producedate as produced4_2_0_
from
car_join_single car0_
inner join
c_e_join_single car0_1_
on car0_.id=car0_1_.cid
inner join
engine_join_single engine1_
on car0_1_.eid=engine1_.id
where
car0_.id=?
one-to-one连接表单向关联映射总结: 需对在主控方的XML文件中设置join元素做连接表,表现为many-to-one。查询时可以使用fetch属性来提高查询效率。
分享到:
相关推荐
3. Hibernate 一对一连接表单向关联: 这种关联方式是通过额外的连接表来实现一对一关系的。连接表通常包含两个外键,分别引用两个参与一对一关联的表。配置上,需要创建一个新的实体类来代表连接表,并在其中定义...
在一对一连接表单向关联中,两个实体通过第三个表来进行关联。这个第三张表通常称为连接表或者关联表,它包含了两个实体的主键字段。 **表结构示例**: - **Person表**: - `personid`: 主键 - `name`: 姓名 - `...
本文旨在深入探讨Hibernate中的实体关联关系映射技术,主要包括一对一、一对多、多对多等不同类型的关联关系及其在实际开发中的应用技巧。通过本文的学习,开发者可以更好地理解和掌握Hibernate框架下的实体关联关系...
本知识点将深入讲解Hibernate中的一对一(OneToOne)连接,特别是单向关联的实现。 在数据库设计中,一对一关联是指两个实体之间存在唯一对应的关系,例如一个人可能只有一个身份证,或者一个账户只有一个用户信息...
这篇博客“Hibernate 多对一连接表单向关联”可能详细讲解了如何在Hibernate中配置和使用这种关联。 首先,我们要理解多对一关联的基本概念。假设我们有两个实体,例如`Employee`(员工)和`Department`(部门)。...
以上介绍的是 Hibernate 中一对一关联关系的三种不同方式,包括一对一连接表单向关联、一对一主键单向关联和一对一外键单向关联。每种关联方式都有其特定的应用场景,选择合适的关联方式对于提高应用程序的性能和可...
#### 2.1.3 一对一连接表单向关联 当两个实体通过第三方连接表关联时,可以使用`<join>`标签。连接表通常包含双方主键作为外键。 ```xml ``` #### 2.1.4 一对多外键单向关联 一个实体可以有多个关联实体,如...
这包括一对一、一对多、多对一和多对多四种关联类型。例如,一个用户可以有多个订单,这是一种一对多的关系;反之,每个订单对应一个用户,这是一种多对一的关系。实现数据关联通常通过配置XML映射文件或使用注解来...
Hibernate通过配置文件支持一对一、一对多、多对一和多对多的关系映射。 **缓存机制**: - **一级缓存**:内部缓存,每个Session有自己的缓存,生命周期与Session相同。 - **二级缓存**:可选的全局缓存,支持应用...
Hibernate支持多种关系映射,如一对一(one-to-one)、一对多(one-to-many)、多对多(many-to-many),通过配置文件中的many-to-one、one-to-many、many-to-many等元素实现。 **缓存机制**: 1. **一级缓存**:...
9. 集合映射:学习如何处理一对多、多对一、多对多的关系映射。 10. 查询和检索:使用HQL(Hibernate Query Language)进行复杂查询,理解 Criteria API。 11. Struts与Hibernate整合:将两者结合,实现数据持久化,...
3. 一对多配置:返回的是一个集合,集合中的元素对应数据库中的一条或多条记录。 4. update()与saveOrUpdate():update()用于更新已存在的持久化对象,而saveOrUpdate()根据对象是否已有ID判断是保存还是更新。 5....
在IT行业中,开发Web应用程序时,常常需要处理复杂的对象关系,比如一对一、一对多、多对多等。这里我们关注的是“一对多”关系的实现,以“hibernate+struts”框架为例,结合MySQL数据库,来创建一个学生对班级的增...
Struts是MVC(模型-视图-控制器)设计模式的一个实现,主要用于控制应用程序的流程,而Hibernate则是一个对象关系映射(ORM)工具,用于简化数据库操作。在这个"简单Struts+Hibernate实例"中,我们将深入探讨这两个...
类之间的关系通过配置文件中的映射元素(如many-to-one、one-to-many、many-to-many)来定义,如一对一、一对多、多对多的关系映射。 Hibernate还提供了缓存机制,包括一级缓存(SessionFactory级别的缓存,每个...
- **替代一对一关联:** 使用多对一替代一对一以减少复杂度。 - **配置对象缓存:** 避免不必要的集合缓存。 - **使用 Bag 和 Set:** 分别用于一对多和多对多关系。 - **使用显式多态:** 对于继承类而言。 - **...
Hibernate通过配置文件(如.hbm.xml)中的`many-to-one`、`one-to-many`、`many-to-many`等标签,实现一对一、一对多、多对多等关系。 4. **Hibernate缓存机制**: - 一级缓存:默认存在于Hibernate Session中,...
2. **创建Hibernate映射**:为每个模型类编写对应的.hbm.xml文件,描述对象与数据库表的关系。 3. **配置Hibernate**:设置Hibernate的配置文件(hibernate.cfg.xml),包括数据库连接信息、方言等。 4. **编写...