Java 中的 record 关键字
在许多 Java 应用中,在对象之间传递不可变数据是最常见但最平凡的任务之一。在 Java 14 之前,这需要创建一个包含样板字段和方法的类,这些字段和方法容易出现琐碎的错误和混乱的意图。随着 Java 14 的发布,现在我们可以使用 record 来解决这些问题。本文中,我们将研究 record 的基本原理,包括它们的意图、生成方法和自定义技术。...
如何在 CompletableFuture 中实现多个 REST 调用
在创建软件功能时,其中一项日常工作是从不同来源检索数据并将其聚合在响应中。在微服务中,这些源通常是外部 REST API。本文中,我们将使用 Java 的 CompletableFuture 来从多个外部 REST API 并行检索数据...
Spring Data JPA 中的 “Not a Managed Type” 异常
在使用 Spring Data JPA 时,我们可能会在引导过程中遇到 “Not a Managed Type” 异常。一些 bean 可能无法创建,导致应用无法启动。虽然实际的堆栈跟踪可能会有所不同...
FetchType: Hibernate & JPA 的 Lazy/Eager 加载
在定义实体映射时,选择正确的 FetchType 是最重要的决定之一。它指定了 JPA 实现(例如 Hibernate)何时从数据库中获取关联实体。你可以在 EAGER 和 LAZY 加载之间进行选择。第一个选项会立即获取关联,另一个仅在使用它时才获取关联。我在本文中解释了这两个选项。选择正确的 FetchType 时的主要挑战是确保尽可能高效地获取实体,并...
使用 JPA 静态元模型创建类型安全的查询
编写条件查询或创建动态实体图时,需要引用实体类及其属性。最快捷、最简单的方法是将所需的名称作为字符串提供。但这有几个缺点,例如,在编写查询时,必须记住或查找实体属性的所有名称。但是,如果必须重构实体并修改某些属性的名称,那么在项目的后期阶段也会导致更大的问题。在这种情况下,必须使用 IDE 的搜索功能,并尝试查找引用修改后的属性的所有字符串。这是一个乏味且容...
Entities 或 DTO – 应该使用哪种投影?
JPA 和 Hibernate 允许你在 JPQL 和 Criteria 查询中使用 DTO 和实体(Entity)作为投影。当我在在线培训或研讨会上谈论 Hibernate 的性能时,经常被问到,使用哪种投影是否重要。答案是:是的!为用例选择正确的投影可能会对性能产生巨大的影响。我并不是说只检索你需要的数据。很明显,检索不必要的信息不会为你带来任何性能优势...
Hibernate 最佳实践
Hibernate 是迄今为止最受欢迎的 JPA 实现。这种受欢迎程度为所有用户带来了几个优势。有很多关于它的博客文章,流行论坛上的问答,以及公认的最佳实践。本文将总结一些 JPA 和 Hibernate 的最佳实践,...
JAVA SQL 查询结果映射之 Hibernate 特有的映射
这是 SQL 查询结果集映射系列的第四篇,也是最后最后一篇。在第一篇文章中,我们了解了一些将查询结果映射到实体的基本映射定义。在第二篇文章中,映射定义变得更加复杂,因为我们将查询结果映射到多个实体并处理额外的字段。在第三篇文中,我们了解了 JPA 2.1 中引入的一个新特性,即构造函数-结果映射。而本文,我们来看看一些 Hibernate 特有的特性,它们不...