`

Hibernate的注解many-to-one

阅读更多

項目中一個實例:

   最近使用annotation做hibernate映射,有两张表乘客(Passanger)表 和订单(VacationOrder )表,乘客表和订单表是ManyToOne,业务只需要从订单表出发设置不同乘客,根据乘客查看预订的订单,采用双向关联,ManyToOne 和Many-To-One 

 

VacationOrder 對象中关于乘客的注解:

VacationOrder 对象继承自Order:

@Entity
@Table(name = "VAC_ORDER")
public class VacationOrder extends Order:

 

 /**
  * 乘客
  */
 @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "order")
 @JoinColumn(name = "orderId")
 private List<Passanger> passangers = new ArrayList<Passanger>();

  

在乘客的Passager中关于订单的注解:

@Entity
@GenericGenerator(name = "seq_gen", strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator", parameters = {
  @Parameter(name = "sequence_name", value = "seq_Passanger"),
  @Parameter(name = "initial_value", value = "100000") })
public class Passanger extends Consumer ;

  

 @ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.LAZY)
 @JoinColumn(name = "orderId", insertable = false, updatable = false)
 private Order order;

 
 @Column(name = "orderId")
 private Long orderId;

 注意:在Passager 对象中将属性 order和orderId映射同一张表中统一字段,目的这样可以查询时适当的减少相关的查询.

 在订单中相应的乘客发生变化时,保存订单可以更改乘客的信息.

如果修改乘客的信息是:

 保存订单时,更给关联中的对象不起作用

查看以下帮助文档:

总结以下:

(1)在乘客表中order和orderId,同时映射一张表的时候,必须设置insertable = false, updatable = false否则将报错,order对象必须设置inserte = false, update = false.

(2)在关联的订单中乘客发生变化时必须将关联的Id设置为null.否则数据库中的乘客的信息不会发生变化.

  

@ManyToOne(cascade = { CascadeType.PERSIST,CascadeType.MERGE}) 它始终是不对VacationOrder 进行更新和新增操作,如果改成@ManyToOne(cascade = { CascadeType.ALL})就可以更新和新增VacationOrder 表,但删除操作是我业务不允许有的。 

官方解释如下: 
CascadeType.PERSIST:级联新增 
CascadeType.MERGE:级联合并 
CascadeType.REFRESH:级联刷新 
CascadeType.REMOVE:级联删除 
CascadeType.ALL:以上四种都是

在Passanger表关系定义如下: 
@ManyToOne(cascade = { CascadeType.PERSIST,CascadeType.MERGE}) 
@JoinColumn(name = "orderId") 

但我在后台方法测试时,如果订单信息修改或新建,保存到乘客表中,医院信息不会级联更新或新增,级联关系不起作用 .

 

CascadeType.PERSIST(级联新建),CascadeType.MERGE(级联合并),如果我把annotation方式改为CascadeType.ALL,级联更新和新增就可以.

分享到:
评论

相关推荐

    Hibernate one-to-many / many-to-one关系映射

    "Hibernate one-to-many / many-to-one关系映射"是两个基本的关系类型,用于表示实体间的关联。在这个主题中,我们将深入探讨这两种关系映射的原理、配置和实际应用。 一、一对一(one-to-one)与一对多(one-to-...

    (4)Hibernate中的many-to-one和one-to-many关系

    本话题主要探讨两种基本的关系映射类型:many-to-one(多对一)和one-to-many(一对多)。这两种关系映射是数据库中常见的关联类型,理解和掌握它们对于开发高质量的Java应用至关重要。 1. many-to-one关系 many-to...

    hibernate many-to-one(多对一)及 cascade(级联).doc

    在Hibernate中,可以通过 `&lt;many-to-one&gt;` 或者 `&lt;one-to-many&gt;` 标签中的 `cascade` 属性来指定这种行为。 #### 代码示例解析 在提供的代码示例中,`&lt;many-to-one&gt;` 标签中包含了 `cascade` 属性的注释示例,但是...

    Hibernate Mapping Many-to-One 实例 内附源代码及附件下载

    对于`Department`,映射文件中会有一个`&lt;class&gt;`标签,其中包含`&lt;set&gt;`标签来定义员工集合,并且使用`&lt;many-to-many&gt;`或`&lt;one-to-many&gt;`标签来映射与`Employee`的关系。对于`Employee`,我们使用`&lt;class&gt;`标签,并在...

    Hibernate one-to-many-annotation

    本文将深入探讨`Hibernate one-to-many`注解的使用和实现细节。 ### 一、`@OneToMany`注解概述 `@OneToMany`注解用于在Java类中表示一个实体与另一实体的多对一关系。例如,一个用户可以拥有多个订单,而每个订单...

    Hibernate应用例子many-to-many

    本示例将详细讲解如何在Hibernate中实现多对多(many-to-many)的关系映射。 在数据库设计中,多对多关系是指两个实体之间存在多个关联,比如学生和课程的关系,一个学生可以选修多门课程,一门课程也可以被多个...

    Hibernate one to many(many to one) 配置

    标题"Hibernate one to many(many to one) 配置"涉及到的是关系型数据库在Java中的持久化框架Hibernate中的两种关联映射关系:一对一(One-to-One)和多对一(Many-to-One)。在数据库设计中,这种关系很常见,例如...

    day36 07-Hibernate抓取策略:many-to-one上的抓取策略

    今天我们要讨论的是Hibernate框架中的一个关键概念——抓取策略,特别是针对"many-to-one"关系的抓取策略。这篇博客将深入剖析这个主题,帮助你更好地理解和应用Hibernate。 Hibernate是Java领域中最流行的对象关系...

    hibernate many to one

    依旧无需特殊配置,除非你需要定义反向关系(one-to-many)。 ### 3. 关联的生命周期管理 在`CascadeType.ALL`中,`Cascade`属性定义了对关联对象的操作应该如何传播。这里包括了对`Class`的CRUD操作。例如,当...

    hibernate 全面学习->hibernate 关联映射学习

    本篇文章将全面探讨Hibernate的关联映射学习,包括一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)以及多对多(Many-to-Many)四种关系映射。 首先,一对一关联映射(One-to-One)是两个实体...

    hibernate one-to-many 单/双向关联映射配置心得

    本文主要关注Hibernate中的一个核心概念——一对一(One-to-One)、一对多(One-to-Many)和多对一(Many-to-One)关联映射,特别是关于“一到多”单向和双向关联映射的配置心得。 首先,让我们了解“一到多”关联...

    Hibernate之第3解之-hibernate_hibernate_many2one_1

    Hibernate提供了`@ManyToOne`注解来标记Many-to-One关系。在实体类中,我们为表示多的一方(例如,Employee)添加该注解,指定它所对应的单的一方(例如,Department)的引用。例如: ```java @ManyToOne @...

    hibernate-one-to-many-uni

    【标题】"hibernate-one-to-many-uni" 指的是在Hibernate框架下实现的一对多单向关联关系。Hibernate是Java开发中常用的持久化框架,它简化了数据库操作,使得开发者可以更加专注于业务逻辑而不是数据库交互。在这个...

    hibernate 关联映射(一) many to one

    在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者用面向对象的方式处理...在后续的学习中,你还可以探索其他类型的关联,如One-to-One、Many-to-Many等,进一步提升你的Hibernate技能。

    hibernate-release-5.0.7.Final.zip官方

    &lt;one-to-many class="Order"/&gt; ``` ```java @Entity public class User { @Id private Long id; private String name; @Fetch(FetchMode.JOIN) @OneToMany(mappedBy = "user") private List&lt;Order&gt;...

    hibernate-distribution-3.6.10.Final-dist

    8. **一对多(One-to-Many)、多对一(Many-to-One)和多对多(Many-to-Many)关系**:Hibernate通过`@OneToMany`,`@ManyToOne`,`@ManyToMany`注解来处理这些关联关系,自动建立关联表或中间表。 9. **事务管理**...

    hibernate5--3.映射关系

    本文将深入探讨Hibernate5中的映射关系,主要包括多对多(Many-to-Many)和一对多(One-to-Many)这两种关系。 一、多对多映射(Many-to-Many) 多对多关系在数据库中表现为两个表之间存在多个连接记录,而在对象...

    基于注解的关联关系Hibernate

    在这个“基于注解的关联关系Hibernate”的主题中,我们将深入探讨如何使用Hibernate的注解来配置不同类型的关联关系,包括一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)和多对多(Many-to-...

    Hibernate注解和xml配置介绍

    此外,使用&lt;many-to-one&gt;或&lt;one-to-many&gt;元素来定义实体间的关联关系。XML配置还可以详细地配置生成器策略、级联行为、懒加载行为等高级映射特性。 在Hibernate配置实例中,我们可以看到单主键映射到一个列,而没有...

Global site tag (gtag.js) - Google Analytics