一对多关联也可分为单向/双向外键关联,我这里只列出其中的一种,其它的可以据此类推(推荐用双向关联)。
SQL:engine_fk表的carid为car_fk表主键的外键
create table ec_item (
id number(10,0) not null,
product varchar2(15) not null,
amount number(10,0) not null,
orderid number(10,0) not null,
primary key (id)
);
create table ec_order (
id number(10,0) not null,
owner varchar2(15) not null,
phone varchar2(15) not null,
address varchar2(50),
primary key (id)
);
alter table ec_item
add constraint fk_item_order
foreign key (orderid)
references ec_order(id);
POJO:Engine类和Car类都有对方的一个引用(以下为省略写法)
public class Order implements Serializable
{
private Set<Item> items = new HashSet<Item>();
}
public class Item implements Serializable
{
private Order order;
}
XML: Order.hbm.xml Item.hbm.xml(以下为省略写法)
<hibernate-mapping package="com.allanlxf.hibernate.association.o2m.entity">
<class name="Order" table="ec_order">
<id name="id" column="id" type="integer">
<generator class="native" />
</id>
<set name="items" cascade="all-delete-orphan" inverse="false" >
<key column="orderid" />
<one-to-many class="Item" />
</set>
</class>
</hibernate-mapping>
<hibernate-mapping package="com.allanlxf.hibernate.association.o2m.entity">
<class name="Item" table="ec_item">
<id name="id" column="id" type="integer">
<generator class="native" />
</id>
<many-to-one name="order" column="orderid" not-null="true" foreign-key="fk_item_order"/>
</class>
</hibernate-mapping>
a) order.getItems().add(item);
item.setOrder(order);
session.save(order);
打印sql如下:
insert
into
ec_order
(owner, phone, address, id)
values
(?, ?, ?, ?)
Hibernate:
insert
into
ec_item
(product, amount, orderid, id)
values
(?, ?, ?, ?)
Hibernate:
update
ec_item
set
orderid=?
where
id=?
one-to-many外键双向关联总结: 需在one的一方设置set集合元素,在many多的一方设置many-to-one元素,在一对多的关联中推荐用这种双向的关联,而不是单向的关联。
以单向关联的插入操作为例:
order.getItems().add(item);
session.save(order);
得到的sql如下:
Hibernate:
insert
into
ec_order
(owner, phone, address, id)
values
(?, ?, ?, ?)
Hibernate:
insert
into
ec_item
(product, amount, id)
values
(?, ?, ?)
程序在运行时会报错:无法将 NULL 插入 ("AUTO_DEMO"."EC_ITEM"."ORDERID")。
仔细观察这里的sql并与前面双向关联时的sql做比较就会发现第二句sql在插入时少插了个orderid,而orderid在数据库中又不为空,因此会报这个错。而在双向关联中就不会出这种错,Hibernate会自动处理好这种情况。
分享到:
相关推荐
Hibernate 一对一唯一外键关联映射详解 Hibernate是一种流行的Java持久层框架,提供了多种关联映射方式,其中一对一唯一外键关联映射是一种常见的关联方式。在本文中,我们将详细介绍Hibernate一对一唯一外键关联...
在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的关系数据库模型在对象模型中的体现。...对于更复杂的双向关联或者其他关联类型,可以参考Hibernate官方文档或更多教程进行深入学习。
本篇主要探讨的是Hibernate中的一对一(OneToOne)关系映射,特别是唯一外键关联(UniDirectional and Bidirectional Association)的情况。我们将深入理解这种关联方式的配置、实现以及它在实际应用中的价值。 1. ...
标题"Hibernate一对一主键关联映射(双向关联)"中的"主键关联"指的是两个实体通过共享相同的主键来建立关联。"双向关联"则意味着在两个实体类中,都可以直接访问到对方的实例,即在实体A中有一个对实体B的引用,...
本文将深入探讨如何使用Hibernate注解实现基于外键的一对多双向关联。我们将通过具体实例来解析这个主题,并结合源码分析其工作原理。 首先,我们要明白一对多关联意味着一个实体可以拥有多个关联的实体。在数据库...
在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的关系映射方式之一,尤其在处理数据库中的唯一外键关联时。这种映射方式允许在一个实体类中引用另一个实体类的唯一实例,形成一对一的关系。在...
标题“Hibernate ORM - 一对多双向关联关系”指的是在数据库建模中,Hibernate ORM(对象关系映射)框架如何处理一个实体类(如User)与多个实体类(如Article)之间的关系。在这种关系中,一个用户可以拥有多个文章...
9. Hibernate 一对一外键双向关联、主键双向关联、连接表双向关联、一对多外键双向关联、一对多连接表双向关联、多对多双向关联: 这些关联方式与单向关联类似,区别在于两个实体类都知道彼此的关联。在双向关联中...
本主题聚焦于“Hibernate双向一对一关联映射”的注解实现,这是一种高级的数据库设计模式,用于处理两个实体之间一对一的关系。 在Hibernate中,一对一关联映射分为单向和双向。单向一对一映射通常涉及一个实体持有...
在Java的持久化框架Hibernate中,一对一双向外键关联是一种常见的关系映射方式,用于表示两个实体类之间一对一的关联关系。在这个场景下,每个实体都有一个引用指向另一个实体,形成双向关联。本篇文章将深入探讨...
本文主要探讨的是Hibernate中的两种关联关系:多对一单向关联和多对一双向关联。通过理解这两种关联方式,我们可以更好地设计和实现复杂的数据库模型。 首先,我们来看**多对一单向关联**。这种关联意味着一个实体...
“Hibernate 一对多,多对一,一对多双向关联”是指在Java持久化框架Hibernate中,实体间常见的三种关联关系。在数据库设计中,这种关联关系是常见的,例如一个用户可以有多个订单(一对多),一个订单对应一个用户...
总结起来,Hibernate中的一对多/多对一关联是通过主外键映射来实现的,通过注解和配置文件定义实体间的关联关系,利用懒加载或立即加载策略控制数据获取,同时要注意双向关联的维护和级联操作的设置,以确保数据的...
本篇文章将深入探讨 Hibernate 中的一对多双向关联映射。 在数据库设计中,一对多关联是指一个实体可以与多个其他实体相关联,比如一个学生可以有多个课程,一个部门可以有多名员工。在Hibernate中,这种关系可以...
总结来说,Hibernate中的双向关联映射是对象关系映射的重要组成部分,包括双向多对多、双向一对多和双向一对一。理解并熟练运用这些映射方式,有助于开发者更好地实现Java应用程序与数据库间的交互,提高开发效率和...
在Java的持久化框架Hibernate中,双向一对多关联映射是一种常见的关系映射方式,它模拟了数据库中的外键关联,使得一个实体可以拥有多个另一个实体的实例。在这个注解版的实现中,我们将深入探讨如何使用Hibernate的...
本教程将重点讲解如何在Hibernate中实现多对多双向关联,这是数据库设计中常见的一种关系类型,它允许一个实体实例与多个其他实体实例相互关联。 在数据库设计中,多对多关系意味着一个表的记录可以与另一个表的多...
在Java的持久化框架Hibernate中,一对一(One-to-One)关联是常见的关系映射类型,它用于表示两个实体之间存在唯一的对应关系。本篇将详细讲解如何使用Hibernate进行一对一单向外键关联,并且该关联涉及到联合主键的...