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

2024-06-21 06:58
文章标签 关联 jpa 一对 一双

本文主要是介绍JPA一对多,多对一双向关联,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

下面是一个订单与订单项的配置。

级联操作与懒加载的配置在注释里面有详细的描述。

订单(Order):

@Entity
@Table(name="orders")
public class Order {@Id@Column(length=40)private String orderId;        //订单ID@Column(nullable=false)private Float amount = 0f;    //总价
/* * cascade={CascadeType.REFRESH,CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REMOVE}* 级联刷新:当获取最新的订单记录时,是否获取最新的订单项记录* 级联保存:当保存Order的时候,需不需要对对Order下面的OrderItem进行保存 * 级联合并(更新):当Order处于游离态的时候,如果更新Order时,items修改了,是否把OrderItem同步更新到数据库* 级联删除:当删除Order时,是否对Order里面的所有OrderItem也执行删除操作(顺序是:先删除订单项,再删除订单)* * 注意:1只用调用refresh()方法时,级联刷新才起作用*        只有调用persist()方法时,级联保存才起作用*        只用调用merge()方法时,级联更新才起作用*        只用调用delete()方法时,级联删除才起作用*       2需要用到级联刷新的情形:当我们获取到一条记录后,在对这个记录操作的时候,有人把这条记录修改了,如果我们想拿到最新的数据,必须调用refresh()方法*        即使调用find()方法也获取不到最新的数据,因为再次调用find()方法是,是从EntityManager的一级缓存中取数据。*        如:EntityManager em = factory.createEntityManager();*         Person person = em.find(Person.class,1)*         em.refresh();*         System.out.println(person);*     *//** fetch=FetchType.EAGER    fetch=FetchType.LAZY* 如果希望获取Order的时候,立即获取OrderItem集合,用FetchType.EAGER* 如果希望获取Order的时候,并不需要立即获取OrderItem集合,只有访问items属性并对其操作的时候才获取,用FetchType.LAZY* * 注意: 1.访问延迟属性时,EntityManger必须是打开状态,否则会抛出延迟加载例外*     2.如果是得到多的一方,默认的是延迟加载,例如:OneToMany*       如果是得到一的一方,默认的是立即加载,例如:OneToOne,ManyToOne*//** mappedBy申明了这个类为关系被维护端,指明了在关系维护端由哪一个属性维护这个关系。* 相当于Hibernate中:* <set name="item" inverse=true>* </set>*/@OneToMany(cascade={CascadeType.REFRESH,CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REMOVE},fetch=FetchType.LAZY,mappedBy="order")private Set<OrderItem> items = new HashSet<OrderItem>();public String getOrderId() {return orderId;}public void setOrderId(String orderId) {this.orderId = orderId;}public Float getAmount() {return amount;}public void setAmount(Float amount) {this.amount = amount;}public Set<OrderItem> getItems() {return items;}public void setItems(Set<OrderItem> items) {this.items = items;}

订单项(OrderItem):

@Entity
public class OrderItem {@Id@GeneratedValue	//ID自增长private Integer id;@Column(length=40,nullable=false)private String productName;@Column(nullable=false)private Float sellPrice;/** 级联保存:一般来说不需要,不可能保存某一个订单项的时候就保存订单* 级联更新:需要,如果改变了订单项的价格,一般来说需要改变订单的总价* 级联刷新:当获取订单项的最新记录时,是否需要获取订单的最新记录* 级联删除:不需要*//** 加载行为:默认是立即加载*//** optional=true 表示可选,即外键字段可以为空* optional=false 表示不可选,即外键字段不为空*//** @JoinColumn(name="order_id")	数据库中外键的名字为order_id*/@ManyToOne(cascade={CascadeType.MERGE,CascadeType.REFRESH},fetch=FetchType.EAGER,optional=false)@JoinColumn(name="order_id")private Order order;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getProductName() {return productName;}public void setProductName(String productName) {this.productName = productName;}public Float getSellPrice() {return sellPrice;}public void setSellPrice(Float sellPrice) {this.sellPrice = sellPrice;}public Order getOrder() {return order;}public void setOrder(Order order) {this.order = order;}


这篇关于JPA一对多,多对一双向关联的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080519

相关文章

使用Spring Boot集成Spring Data JPA和单例模式构建库存管理系统

引言 在企业级应用开发中,数据库操作是非常重要的一环。Spring Data JPA提供了一种简化的方式来进行数据库交互,它使得开发者无需编写复杂的JPA代码就可以完成常见的CRUD操作。此外,设计模式如单例模式可以帮助我们更好地管理和控制对象的创建过程,从而提高系统的性能和可维护性。本文将展示如何结合Spring Boot、Spring Data JPA以及单例模式来构建一个基本的库存管理系统

C++ STL关联容器Set与集合论入门

1. 简介 Set(集合)属于关联式容器,也是STL中最实用的容器,关联式容器依据特定的排序准则,自动为其元素排序。Set集合的底层使用一颗红黑树,其属于一种非线性的数据结构,每一次插入数据都会自动进行排序,注意,不是需要排序时再排序,而是每一次插入数据的时候其都会自动进行排序。因此,Set中的元素总是顺序的。 Set的性质有:数据自动进行排序且数据唯一,是一种集合元素,允许进行数学上的集合相

关联规则(一)Apriori算法

此篇文章转自 http://blog.sina.com.cn/s/blog_6a17628d0100v83b.html 个人觉得比课本上讲的更通俗易懂! 1.  挖掘关联规则 1.1   什么是关联规则 一言蔽之,关联规则是形如X→Y的蕴涵式,表示通过X可以推导“得到”Y,其中X和Y分别称为关联规则的先导(antecedent或left-hand-side, LHS)和后

【数据库实战】1_Oracle_命中关联人或黑名单或反洗钱客户

一、字段名称 1、CST_ID :客户编号 2、IDV_LGL_NM :客户姓名 3、关联方标志 RELPARTY_IND,0-否 未命中,1-是 命中 4、TBPC1010表,RSRV_FLD1_INF(备用字段)中的 第6位:黑名单标志,0无,1是。 第10位:反洗钱风险等级1-5。 反洗钱风险等级5级: 1级-低风险客户 2级-较低风险客户 3级-中风险客户 4级-较高风险客户 5级-高风

ManyToMany双向外键关联(基于注解)的映射案例(简单版)

学生和老师就是多对多的关系,一个学生有多个学生,一个老师也有多个学生,这里的多对多映射采用中间表连接的映射策略,建立中间表的映射策略,建立中间表分别引入俩边的主键作为外键。通过中间表映射俩个表之间的关系。 下面就以学生类和老师类为例介绍多对多的映射关系的实例 Students类 package mtm_bfk;import java.io.Serializable;import java.

ISO26262和Aspice之间的关联

ASPICE 介绍: ASPICE(Automotive Software Process Improvement and Capability dEtermination)是汽车软件过程改进及能力评定的模型,它侧重于汽车软件的开发过程。ASPICE 定义了一系列的过程和活动,包括需求管理、软件设计、软件实现、软件测试、软件集成、软件配置管理、软件质量保证等方面。其目的是通过评估和改进汽车软件的

Flink重点难点:维表关联理论和Join实战

点击上方蓝色字体,选择“设为星标” 回复”面试“获取更多惊喜 在阅读本文之前,你应该阅读过的系列: 《Flink重点难点:时间、窗口和流Join》《Flink重点难点:网络流控和反压》 Flink官方文档中公开的信息 1 Join 的概念 在阅读之前请一定要先了解: 数据流操作的另一个常见需求是对两条数据流中的事件进行联结(connect)或Join。Flink DataStream API中

VS Code与SVN关联

VS Code是一款轻量级的集成开发环境,可通过安装插件与SVN进行关联。以下是将VS Code与SVN关联的步骤: 安装SVN插件:在VS Code中打开Extensions(快捷键:Ctrl+Shift+X),搜索并安装"svn"插件。 安装SVN命令行工具:在计算机上安装SVN命令行工具,确保在命令行中可以运行svn命令。 配置SVN路径:在VS Code中打开用户设置(快捷键:Ct

spring data jpa 懒加载问题

使用spring-data-jpa+spring+springmvc+restful的时候,碰到了一个问题,就是懒加载的问题。因为是后端返回的是JSON数据,所以如果在要额皮质懒加载的的关联字段的时候,只是配置 @ManyToOne(fetch=FetchType.LAZY)               @JoinColumn(name = "cat_measurement") 这样会报一个错误

git关联多个远程仓库的方法

本地仓库关联多个远程库,比如同时关联GitHub和Gitee,操作方法如下 本地创建好文件夹及文件 初始化git git init 分别在GitHub和Gitee上创建好远程仓库回到本地关联远程仓库 git remote add github git@github.com:imchaoyu/note.gitgit remote add gitee git@gitee.com