实体设计器
一旦您 安装 JPA Buddy ,您会发现:
编辑器 工具栏
JPA 设计器 工具窗口

您可以在 designer settings中自定义 JPA 设计器 的外观。 您可以将其与其他面板一起显示,作为独立面板,将其集成到标准 IntelliJ IDEA 面板中,或者完全隐藏它。
持久性工具窗口
大多数以前在 JPA 结构 中可用的功能现在在 持续性工具窗口 中都可以使用。 此外,JPA Buddy 向 持久性 工具窗口添加了以下功能:
创建 JPA 实体,从 Java 或 Kotlin 类生成 JPA 实体
创建 Spring Data JPA Repository 和 Spring Data Projection
基于 JPA 实体创建 DTO
查看每个实体的 DTO 和投影

JPA Palette

JPA Palette 旨在为当前上下文生成适当的代码。 对于实体,它可以是属性或索引;对于仓库——查询方法等。
JPA Palette 为以下功能提供代码生成向导:
关联性能提示
Hibernate 具有许多关系映射类型,但不是所有的都同样高效。
在创建关联时,JPA Buddy 简要解释了当前配置为何效率低下并可能导致性能问题。 请使用 了解详情 按钮查看。

此外,您可以应用 JPA Buddy 建议的优化。 只需从可能的选项的下拉列表中选择:

JPA 检查器

JPA Inspector 旨在编辑现有代码:属性、索引、查询等。
JPA Inspector 允许您在其中配置 JPA 实体和属性。 点击您需要配置的任意元素,然后更改所需的属性:
Hibernate 验证
对于使用 Hibernate Validations 的项目,会出现一个包含您可以应用于所选属性的验证部分:
编辑器工具栏
编辑器工具栏包含根据文件内容显示的相关操作。 您可以在编辑器窗口顶部找到它。
实体生成
要创建新的 JPA 实体,请右键点击所需的文件夹并选择 New -> JPA Entity (1)。 此外,您可以从 JPA 结构 (2) 选项卡创建一个新的实体:

之后会出现以下窗口:

语言支持
JPA Buddy 支持 Java 和 Kotlin。 当 JPA Buddy 检测到您的项目中存在 Kotlin 依赖时, 新建实体 窗口中会出现一个额外选项,允许您选择语言:

此外,在设置 -> 工具 -> JPA Buddy -> 实体声明中,您可以选择在 新建实体 窗口中默认选择的语言:

ID 及其生成策略
根据 JPA 规范,实体定义需要一个 ID 属性。 JPA Buddy 允许您生成这个属性并选择类型 (1) 和生成策略 (2)。 此外,您可以指定用于 Sequence 生成策略的序列(3)。

如果您想将嵌入式实体用作 ID,JPA Buddy 会为您提供项目中存在的 @Embeddable 实体列表:

您还可以通过 JPA Palette (1)、Editor Toolbar (2) 或使用快速修复 (Alt+Enter) (3) 生成 ID 属性。

之后,将出现一个具有更全面自定义选项的向导:

请参见下面生成的 ID 示例:
提取到 MappedSuperclass
随着您的应用程序增长和 JPA 模型的演变,您可能会意识到某些属性在多个实体中是通用的,应该提取到一个 @MappedSuperclass 中以便更好地组织代码。 JPA Buddy 可以轻松将方法和属性连同它们的 JPA 注释提取到 MappedSuperclass 中,并构建一个设计良好的实体层次结构。
要实现此目的,请点击实体的属性,然后导航到实体设计器选项卡并访问操作菜单,或按 Alt+Enter 打开上下文操作菜单。 从此处开始,选择 提取到 MappedSuperclass ,如下所示:

接下来选择要包含在 MappedSuperclass 中的所需属性和方法。 JPA Buddy 将自动把现有注解应用到提取的属性上。 请注意,任何在方法中使用的属性也将包含在内。

应用上述参数后,我们的 Pet 实体将从以下生成的类扩展,移除提取的属性:
Lombok
检查
Lombok 是一个很好的工具,可以使您的 Java 代码简洁且干净。 但是在将 Lombok 与 JPA 结合使用时,有几件事需要考虑。 JPA Buddy 通过一组检查帮助您在 JPA 实体中使用 Lombok 以遵循最佳实践:
避免将 @EqualsAndHashCode 和 @Data 与 JPA 实体一起使用。
实体本质上是可变的,因此为它们实现 equals() 和 hashCode() 并不是一项简单的任务。 Lombok 提供的实现不太适用于 JPA 实体,可能会导致集合问题和懒加载属性的意外加载。
使用 @ToString 时始终排除 lazy 属性
默认情况下, @ToString 包含所有对象字段。 这种方法可能会对 JPA 实体产生不良的副作用:意外加载懒惰属性。 这很容易损害应用程序性能,或者如果发生在事务之外,则导致 LazyInitializationException。
请不要忘记将 @NoArgsConstructor 添加到具有 @Builder 或 @AllArgsConstructor 的实体中
他们引入了自己的构造函数,因此编译器不会生成默认的构造函数。 根据规范,所有 JPA 实体都需要无参数构造函数。

请查看我们的 文章 ,了解更多关于为什么遵守上述规则如此重要的信息。
注解
对于使用 Lombok 的项目,JPA Inspector 显示一个部分,您可以向实体添加可能的注解。

设置
JPA Buddy 提供使用 Lombok 注解生成新实体和属性的可能性。 要配置在创建新实体或属性时要添加的属性,您可以在实体声明窗口的底部选择所需的选项。

Hibernate
类型与 JPA 转换器
JPA Buddy 通过 JPA Inspector 帮助您生成 JPA Converter 或 Hibernate Custom Type 的空白:
此外,您可以通过 JPA Structure 创建它。 点击 并选择 JPA 转换器 或 Hibernate CustomType。

在“创建自定义类型”窗口中,您可以配置类名、实体属性类型和数据库列类型。
对于 JPA Converter,您可以定义它是否将自动适用。

对于 Hibernate Custom Type,您可以设置是否允许基于参数更改类型的行为。

这是一个生成的 Hibernate Custom Type 示例:
事件系统
Hibernate 事件系统是一个强大的工具,允许您记录或广播更改、在不可逆操作前执行附加检查、在数据状态变化时挂钩业务逻辑等。 对于所有这些情况,Hibernate 提供事件监听器,JPA Buddy 可以帮助您通过几次点击来创建它们:
Envers 支持
使用 JPA Designer 为 JPA 实体及其字段添加 @Audited 注解:

修订实体
Hibernate 将所有已审核实体的所有版本存储在单独的表中。 默认情况下,每个新修订版本都会分配一个修订号和时间戳。 如果您想创建一个自定义修订实体并且没有任何实体用 @RevisionEntity 注释,JPA Buddy 为此提供了一个方便的对话框。

在 创建修订实体向导中,JPA Buddy 允许您指定:
父级实体(例如,
DefaultRevisionEntity或DefaultTrackingModifyingEntitiesRevisionEntity)。表的名称。
是否创建一个修订监听器或选择一个现有的监听器。
如果未指定父节点,则需要修订号和时间戳字段。
实体将要保存的源根和包。

给定的配置将生成以下代码:
检查
JPA Buddy 提供了许多有助于编码的检查。 默认情况下,所有检测在所有范围内都启用,并且具有警告严重级别。 您可以在设置 -> 编辑器 -> 检查 -> JPA Buddy 中查看并配置提供的检查完整列表。

设置
命名模板
Java 代码样式可能因项目而异。 此外,在使用外部数据库时,您需要遵循表、列等的命名约定,以便将它们映射到 JPA 实体。 JPA Buddy 为您提供灵活的命名模板配置,这些配置会自动应用于新的实体和属性。
默认情况下,Spring Boot 使用 SpringPhysicalNamingStrategy 配置物理命名策略。 该实现提供与 Hibernate 4 相同的表结构:所有点都被替换为下划线,且 camel casing 也被替换为下划线。 此外,默认情况下,所有表名都是小写生成的。 例如,对于下面的两个实体声明,数据库表的实际名称将是 pet_type。
或者
常量生成
可维护性是任何项目的重要方面,而 JPA 项目通常包含众多涉及 JPQL 或原生查询语句、属性引用、查询和绑定参数名称的字符串。 根据最佳实践,保持持久层结构良好的方法之一是使用常量。 您可以在 Thorben Janssen的文章中了解相关信息。
JPA Buddy 为实体、表和列名称提供常量生成。 您还可以选择放置常量的位置。

设计器设置
JPA Buddy 在默认模式下配备了功能丰富的工具窗口。 然而,对于屏幕较小的用户来说,工具窗口可能会占用大量的水平空间。 在这种情况下,JPA Buddy 提供了 minimalistic mode 作为一个选项。 此外,JPA Buddy 提供了设置,您可以微调主要视觉元素的外观:
