`
starbhhc
  • 浏览: 654620 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

Hibernate系列:映射一对多外键双向关联

阅读更多
一对多关联也可分为单向/双向外键关联,我这里只列出其中的一种,其它的可以据此类推(推荐用双向关联)。
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 one-to-one 一对一唯一外键关联映射_单向 and 双向

    Hibernate 一对一唯一外键关联映射详解 Hibernate是一种流行的Java持久层框架,提供了多种关联映射方式,其中一对一唯一外键关联映射是一种常见的关联方式。在本文中,我们将详细介绍Hibernate一对一唯一外键关联...

    Hibernate一对一唯一外键关联映射(单向关联)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的关系数据库模型在对象模型中的体现。...对于更复杂的双向关联或者其他关联类型,可以参考Hibernate官方文档或更多教程进行深入学习。

    hibernate一对一之唯一外键关联(双向关联)

    本篇主要探讨的是Hibernate中的一对一(OneToOne)关系映射,特别是唯一外键关联(UniDirectional and Bidirectional Association)的情况。我们将深入理解这种关联方式的配置、实现以及它在实际应用中的价值。 1. ...

    Hibernate一对一主键关联映射(双向关联)

    标题"Hibernate一对一主键关联映射(双向关联)"中的"主键关联"指的是两个实体通过共享相同的主键来建立关联。"双向关联"则意味着在两个实体类中,都可以直接访问到对方的实例,即在实体A中有一个对实体B的引用,...

    Hibernate Annotation 基于外键的一对多双向关联

    本文将深入探讨如何使用Hibernate注解实现基于外键的一对多双向关联。我们将通过具体实例来解析这个主题,并结合源码分析其工作原理。 首先,我们要明白一对多关联意味着一个实体可以拥有多个关联的实体。在数据库...

    hibernate一对一唯一外键关联映射(单项关联)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的关系映射方式之一,尤其在处理数据库中的唯一外键关联时。这种映射方式允许在一个实体类中引用另一个实体类的唯一实例,形成一对一的关系。在...

    Hibernate ORM - 一对多双向关联关系

    标题“Hibernate ORM - 一对多双向关联关系”指的是在数据库建模中,Hibernate ORM(对象关系映射)框架如何处理一个实体类(如User)与多个实体类(如Article)之间的关系。在这种关系中,一个用户可以拥有多个文章...

    Hibernate关联映射

    9. Hibernate 一对一外键双向关联、主键双向关联、连接表双向关联、一对多外键双向关联、一对多连接表双向关联、多对多双向关联: 这些关联方式与单向关联类似,区别在于两个实体类都知道彼此的关联。在双向关联中...

    Hibernate双向一对一关联映射(注解版)

    本主题聚焦于“Hibernate双向一对一关联映射”的注解实现,这是一种高级的数据库设计模式,用于处理两个实体之间一对一的关系。 在Hibernate中,一对一关联映射分为单向和双向。单向一对一映射通常涉及一个实体持有...

    Hibernate一对一双向外键关联(annotation/xml)

    在Java的持久化框架Hibernate中,一对一双向外键关联是一种常见的关系映射方式,用于表示两个实体类之间一对一的关联关系。在这个场景下,每个实体都有一个引用指向另一个实体,形成双向关联。本篇文章将深入探讨...

    hibernate03:多对一单向关联、多对一双向关联

    本文主要探讨的是Hibernate中的两种关联关系:多对一单向关联和多对一双向关联。通过理解这两种关联方式,我们可以更好地设计和实现复杂的数据库模型。 首先,我们来看**多对一单向关联**。这种关联意味着一个实体...

    hibernate一对多,多对一,一对多双向关联

    “Hibernate 一对多,多对一,一对多双向关联”是指在Java持久化框架Hibernate中,实体间常见的三种关联关系。在数据库设计中,这种关联关系是常见的,例如一个用户可以有多个订单(一对多),一个订单对应一个用户...

    hibernate基于主外键的一对多/多对一关联

    总结起来,Hibernate中的一对多/多对一关联是通过主外键映射来实现的,通过注解和配置文件定义实体间的关联关系,利用懒加载或立即加载策略控制数据获取,同时要注意双向关联的维护和级联操作的设置,以确保数据的...

    hibernate对映射xml的一对多的双向关联详解

    本篇文章将深入探讨 Hibernate 中的一对多双向关联映射。 在数据库设计中,一对多关联是指一个实体可以与多个其他实体相关联,比如一个学生可以有多个课程,一个部门可以有多名员工。在Hibernate中,这种关系可以...

    hibernate表之间3种双向关联映射

    总结来说,Hibernate中的双向关联映射是对象关系映射的重要组成部分,包括双向多对多、双向一对多和双向一对一。理解并熟练运用这些映射方式,有助于开发者更好地实现Java应用程序与数据库间的交互,提高开发效率和...

    hibernate双向一对多关联映射(注解版)

    在Java的持久化框架Hibernate中,双向一对多关联映射是一种常见的关系映射方式,它模拟了数据库中的外键关联,使得一个实体可以拥有多个另一个实体的实例。在这个注解版的实现中,我们将深入探讨如何使用Hibernate的...

    Hibernate教程14_关系映射之多对多双向关联

    本教程将重点讲解如何在Hibernate中实现多对多双向关联,这是数据库设计中常见的一种关系类型,它允许一个实体实例与多个其他实体实例相互关联。 在数据库设计中,多对多关系意味着一个表的记录可以与另一个表的多...

    Hibernate一对一单向外键关联 (联合主键annotation)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联是常见的关系映射类型,它用于表示两个实体之间存在唯一的对应关系。本篇将详细讲解如何使用Hibernate进行一对一单向外键关联,并且该关联涉及到联合主键的...

Global site tag (gtag.js) - Google Analytics