如何在 Spring Boot 和 Hibernate 中使用 JPA 实体的类型化 ID?

问题描述 投票:0回答:1

我正在使用 Spring Boot 和 Hibernate 来开发应用程序,我想增强 JPA 实体 ID 的类型安全性。目前,ID 字段定义为

Long
,但我想为其提供显式类型。这是我所拥有的一个例子:

@Entity
public class User {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;
}

我想修改这段代码,为 ID 字段提供更具体的类型。这是我的想法:

@Entity
public class User {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Id id;

  record Id(Long id) {}
}

通过引入一个名为

Id
的嵌套记录类,我可以确保只有该类的实例用作
User
实体的 ID。这种方法使我能够避免意外地将另一个实体的 ID 作为参数传递,因为它不再只是一个
Long

java spring-boot hibernate jpa
1个回答
0
投票

您可以执行以下操作:

  1. 使您的 ID 成为一个单独的记录或类,而不是嵌套的记录或类。
  2. 创建一个实现 AttributeConverter 的转换器类(用 @Converter(autoApply = true) 注解)
  3. 将您的 Id 记录或类重命名为 UserId 之类的名称,因为该名称会与 @Id 注释冲突。
  4. 将 id 字段的 GenerationType 从 IDENTITY 更改为 AUTO,以允许您的持久性提供程序对强类型 id 采用更灵活的策略。

您现在应该可以操作了。

© www.soinside.com 2019 - 2024. All rights reserved.