首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JAVA 拾遗--JPA 二三事

补充说明:JPA 是一个规范,本文所提到的 JPA,特指 spring-data-jpa。 tips:阅读本文之前,建议了解值对象和实体这两个概念的区别和领域驱动设计的基本概念。...这也是为什么我一直在表达这样一种观点:JPA 是对 DDD 很好的实践的。...使用 @Convert 关联一对多的值对象 说到一对多,第一反应自然是使用 @OneToMany 注解。...的确,我自己在项目中也主要使用这个注解来表达一对多的关联,但这里提供另一个思路,来关联一对多的值对象。 以商品和商品组图来举例。...使用 @Version 来实现乐观锁 乐观锁一直是保证并发问题的一个有效途径,spring data jpa 对 @Version 进行了实现,我们给需要做乐观锁控制的对象加上一个 @Version 注解即可

2K100

DDD落地,如何持久化聚合

聚合是 DDD 中最为重要的概念,即使你不使用 DDD 编写代码也需要理解这一重要的概念 —— 部分对象的生命周期可以看做一个整体,从而简化编程。...全量的数据更新数据库的事务较大" 设计小聚合,这是业务一致性的代价,基本无法避免,但是对于一般应用来说,写和更新对数据库的频率并不高。使用读写分离即可解决这个问题。...大家在实际操作中发现,JPA 并不好用。其实这不是 JPA 的问题,是因为 JPA 做的太多了,JPA 不仅有各种状态转换,还有多对多关系。...关联等复杂查询,读写分离查询不要给 JPA 做,JPA 只做单个对象的查询 在这些基本的规则下可以使用 @OneToMany 的 cascade 属性来自动保存、更新聚合。...DDD 只是手段不是目的,对一般业务系统而言,充血模型不是必要的,我们的目的是让编码和业务清晰。这里引入两个概念: 业务主体。

2.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    「拥抱开源」从表设计到 JPA 实现

    今天的我拿起键盘就是猛敲代码。 果然,十分钟后各种 JPA 报错开始了。跟新手党一样,看到一个错误就解决一个,没有好好思考为什么会出现这样的错误。...于是乎,遇到一个解决一个,解决一个又遇到一个,经过数十个报错的来回起伏。 敏锐的我发现苗头有些不对。全靠脑细胞的记忆,以及开始对第一个错误的解决过程开始模糊不清了。...---- 02 JPA 关联 在 JPA 中分别使用 @OneToOne、@OneToMany、@ManyToOne、@ManyToMany 注解表示一对一、一对多,多对一、多对多三种关联关系。...与订单明细数据的关系是一对多。即@OneToMany,注意这里需要级联保存、修改、删除、刷新所有的操作。 商品明细数据,也包含两种关联关系。 与商品数据之间的关系是多对一。...这个周末,又一次成功“强迫”自己学习。 感谢各位小伙伴的阅读,这里是一个技术人的学习与分享。

    1.7K20

    JPA的多表复杂查询:详细篇

    我将举几个栗子,来详细的说一下我自己在使用jpa多表复杂查询的场景和想法。 栗子1: 以一个实体类User中的几个属性进行筛选。...名字 ID 手机号 这是一个单表的多条件复杂查询,由于是在几个属性中进行筛选,其中的属性的个数不知道有多少个,所以只需要利用Specification 查询就可以很方便的实现这个需求。...所以pageNumber 和pageSize 也可以直接写入到这个类中,用于方便接收参数,主要是对下面3个参数的封装 Specification specification = new Specification...接下来的两个属性 也同理, 许多人多jpa 有很大的误解,认为jpa 的多表,多条件复杂查询,不如mybatis的查询,在之前我也是这么觉得,但自从通过jpa 实现了这个多表多条件的复杂查询之后,我觉得...hibernate的复杂查询 不逊于mybatis ,尤其是对sql 语句不是很精通的码农,虽然hibernate的门槛较高可jpa 恰恰降低了hibernate 所需要的门槛,希望大家可以通过我的经验

    4.4K101

    Spring Data JPA 就是这么简单

    使用 jpa 是可以解决一些我们写 sql 语句的烦恼,但是搞开发的如果 sql 写不好,还是很头疼的。...一对多的关系,jpa 使用的注解是 @OneToMany 多对一的关系,jpa 使用的注解是 @ManyToOne 多对多的关系,jpa 使用的注解是 @ManyToMany 在使用 jpa 的时候,...当删除数据的时候,如果该数据存在外键是无法直接删除的,这是在日常使用当中很容易遇到的一个问题,现在就这个问题给出一些解决方案: ClassRoom 核心代码如下所示: @OneToMany(mappedBy...orphanRemoval 使用细则 orphanRemoval 这个属性只存在两类关系注解中 @OneToOne 和 @OneToMany jpa 为什么把这个注解仅仅只放在这两个关系类注解中呢?...orphanRemoval 属性就好,当然在@ManyToMany 这个注解当中是没有 orphanRemoval 这个属性的,还是需要使用自己的级联删除属性的。

    7K50

    论如何用七天的时间打造一款(并不)爆款的匿名树洞网站

    虽然说是毫不犹豫,但其实前端和后端选型的时候,我还是有一些调整和妥协。...(当然,这是我的一厢情愿),遂决定改用 Java 开发。...本来我已经设计了一套通过要求用户提交 WebVPN Cookies 并且及时验证有效性后即可登录的模式,结果在线上测试的时候才发现这个 Cookies 只要换了个 IP 地址就会自动失效,因此使用用户提交的...不过好在这些问题最后都有惊无险的化解了。...不过在这里,必须特别感谢 GitHub 上 这位老兄的 Gist 提供了一套在 Vue 上使用异步 computed 属性的方式,简直是救了我的命(我在这个一年前的 Gist 下面回复,作者竟然还回我了

    2K30

    深入理解JPA

    JPA的设计目标是简化开发者对数据库的访问,提高持久化层的灵活性和可维护性。本文将深入介绍JPA的基本概念以及在Java应用中的应用场景。 1. 什么是JPA?...JPA不仅提供了简单的CRUD操作,还支持复杂查询、事务管理等数据库交互功能。 2. JPA的核心概念 2.1 实体(Entity) 在JPA中,实体是指映射到数据库表的Java对象。...2.2 映射关系 JPA支持多种映射关系,包括一对一、一对多、多对一、多对多等。通过在实体类之间使用注解,可以定义它们之间的关系。...2.3 持久化上下文(Persistence Context) 持久化上下文是JPA用来管理实体的一个重要概念。它代表了一个“内存中的数据库”,在持久化上下文中对实体的任何更改都会被跟踪和管理。...如果大家觉得有用的话,可以关注我下面的微信公众号,极客李华,我会在里面更新更多行业资讯,企业面试内容,编程资源,如何写出可以让大厂面试官眼前一亮的简历,让大家更好学习编程,我的抖音,B站也叫极客李华。

    9910

    Spring Data JPA 多表操作详解

    Spring Data JPA 简介Spring Data JPA 是 Spring 框架中的一个子项目,旨在简化 JPA(Java Persistence API)的使用。...多表操作的基本概念在数据库中,多表操作是指对多张表进行联合查询或关联操作。这包括以下几种常见的情况:一对一关系(One-to-One):两个表之间存在一对一的关联关系,例如一个用户有一个地址信息。...一对多关系的实现一对多关系是指一个表中的一条记录可以对应另一个表中的多条记录。在 Spring Data JPA 中,我们可以通过 @OneToMany 和 @ManyToOne 注解来实现这种关系。...在 User 类中,我们使用 @OneToMany 注解定义一对多关系,并通过 mappedBy 属性指定关联的字段。...让我们继续探索 Spring Data JPA 的更多功能,为我们的应用开发注入更多活力!我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

    20201

    Java一分钟之-JPA的懒加载与即时加载

    在Java Persistence API (JPA)中,实体关系的加载策略是开发者必须关注的重要概念之一。...这是JPA的默认加载策略,适用于一对多、多对多关系,以及单向的一对一关系。优点减少初次查询的数据量,提高响应速度。避免加载不必要的数据,节省内存资源。...常见问题与避免策略问题1:性能开销undefined避免策略:仅对确实需要立即加载的关联使用即时加载,避免大量数据一次性加载。...开发者应根据具体需求权衡利弊,合理配置加载策略,并注意避免上述提及的常见问题。通过结合使用JOIN FETCH、实体图加载等方式,可以更高效地管理数据加载,提升应用的整体表现。...我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

    26800

    关于Java持久化相关的资源汇集:Java Persistence API

    常见问题解答   几个星期以前,我以“JPA:好与坏”为主题主办了一次 网上技术交流会。它受到了广泛的关注,因此,我没有足够的时间在这个时间空档结束时解答所有问题。这里只列出了对其中部分问题的答复。...问题:推荐对主键使用“long”还是“Long”?如果允许使用null作为值,将会如何? 回答:这实际上取决于您的数据模型。...我们已成功实现这个目标,因此您只需使用供应商特有的API来获得JPA规范没有解决但您的应用程序中需要的功能。...这是因为EJB3规范对会话bean部分的大多数更改着重实现编程模型的改进。...问题:什么是实现过程的最佳位置,例如,检查许多用户及其帐户(在银行应用程序中)以付给利息?是在数据库的存储过程中实现,还是在EJB中使用JPA实现,还是同时使用这两种方式?

    2.5K30

    JPA实体类中的注解

    length:表示该字段的大小,仅对String类型的字段有效。  insertable:表示在ORM框架执行插入操作时,该字段是否应出现INSETRT语句中,默认为true。 ...通常ORM框架可以根据属性类型自动判断数据库中字段的类型,但是对于Date类型仍无法确定数据库中字段类型究竟是DATE,TIME还是TIMESTAMP。...@OneToMany 描述一个一对多的关联,该属性应该为集体类型,在数据库中并没有实际字段。 ...,其关联的实体也应当被更新或删除  例如:实体User和Order是OneToMany的关系,则实体User被删除时,其关联的实体Order也应该被全部删除 @ManyToMany 描述一个多对多的关联...可以将超类的JPA注解传递给子类,使子类能够继承超类的JPA注解 @Embedded @Embedded将几个字段组合成一个类,并作为整个Entity的一个属性.

    3.9K70

    Hibernate学习笔记 多表映射

    我这里是用来修改外键约束的名称。其他的使用方法需要查看官方文档。...本来也应该有一个应用ManyToOne注解的article字段来表示评论所属的文章,但是为了演示单向的OneToMany映射,所以我故意不添加这个文章属性。...双向的OneToMany 理解了单向OneToMany之后,很容易就能理解双向OneToMany了。两个实体类一边需要使用ManyToOne注解,另外一边的集合类使用OneToMany注解。...需要注意在双向注解中,OneToMany需要额外一个参数,mappedBy,指定ManyToOne注解那一边的属性名,这样Hibernate才会明白这是一个双向注解。...ManyToMany 有了一对一、一对多、多对一映射的概念之后,多对多就很容易理解了。

    1.6K10

    spring boot 中使用 jpa以及jpa介绍

    大家好,又见面了,我是你们的朋友全栈君。 最近在项目中使用了一下jpa,发现还是挺好用的。这里就来讲一下jpa以及在spring boot中的使用。 在这里我们先来了解一下jpa。...如果设置@AccessType(PROPERTY),通过getter和setter方法访问Entity的变量。 @JoinColumn 指定一个实体组织或实体的集合。这是用在多对一和一对多关联。...@ManyToMany 定义了连接表之间的多对多一对多的关系。 @ManyToOne 定义了连接表之间的多对一的关系。 @OneToMany 定义了连接表之间存在一个一对多的关系。...了解了注解之后我们来看看如何使用吧 4.代码实战 4.1maven依赖 添加jpa起步依赖 org.springframework.boot...并且从上面的repository接口代码我们可以看到,接口中并没有定义任何的方法,这是因为JpaRepository中帮我们定义了基础的增删改查方法,可以很方便的直接使用。

    4.5K10

    放弃 MyBatis、JPA,我最终选择了 JDBC Template!真香!!

    JPA可以视为Hibernate的儿子,也继承了这个思路,把SQL彻底封装起来,让Java程序员看不到关系的概念,用纯的面向对象思想,重新创造一个新的查询语言代替sql,比如hql,还有JPQL等。...支持JPA的框架,例如Ebean都属于这种类型的框架。 但封装SQL,使用另一种纯的面向对象查询语言代替sql,真的能够让程序员更容易实现持久层操作吗?...利用Spring框架,可以把JDBC Template和JPA结合起来使用,在JPA不好查询的地方,或者效率低不好优化的地方使用JDBC,缓解了Hibernate/JPA封装SQL造成的麻烦,但我仍没看到任何封装...不论是jdbc,还是hql/JPQL,只要使用拼接的查询语句都是不安全的。对于JDBC来说,使用参数化的sql语句代替拼接,可以解决问题。而JPA则应该使用Criteria API解决这个问题。...JOOQ这个极端轻量级的框架技术上是最完美的,突然有一天几个Web系统同时崩了,最后发现是JOOQ试用期过期了,这是JOOQ的失败之处,它不是完全免费的,只是对MySql之类的开源数据库免费。

    3.4K10

    史上最简单的JPA关联教程

    JPA关联查询 因为项目中我们用到的都是双向管理关系,所以这边单向的我就不多做介绍。...我们这边接着上一节的课程继续介绍,这边我新建了Goods,GoodsDetail,Classify,Address四个实体映射类。分别进行一对一,一对多,多对多的关联介绍。...但是没有设置JsonIgnore 的一方就会全部关联查询出来。这是这个方法的缺陷,可以采用其他的方法,方法就在上面给出的博客里面。 请求的结果如下所示: ? ?...2.接下来就是介绍双向一对多的关联查询了,这边我用用户实体类(user)和地址实体类(address)来做具体介绍,注解分别为@OneToMany和@ManyToOne(一对多和多对一) 用户实体类:...3.接下来最后的多对多查询,这边我用商品实体类(goods)和商品分类实体类(classify)给大家做细致的介绍。

    1.8K60

    「拥抱开源」从零开始 Docker、Mysql & JPA

    顺便还能感受下新的版本特性。 下载完成之后,可以使用 images 命令查看本地的镜像版本。例如:mysql latest,zookeeper 3.4.14。 目前,还没有部署测试环境的概念。...到这里,一个名叫 oPos 的关系型数据库就创建好了。 ---- 04 JPA 配置 在国内使用 JPA 来操作数据库,这样的运用场景是非常少的。...在商业运用中,大量的 SQL 查询需要手动干预进行优化。 虽然,有更优秀的操作数据库的解决方案。但是,JPA 真的就没有优点了吗? 答案当然是:我也不知道。...懒加载的一对多、多对多、一对一等配置: @OneToMany(cascade = { CascadeType.REFRESH, CascadeType.PERSIST, CascadeType.MERGE...这个周末,又一次成功“强迫”自己学习。 感谢各位小伙伴的阅读,这里是一个技术人的学习与分享。

    66620
    领券