我可以在 JPA 实体中使用 Java 16 条记录吗?

Can I use Java 16 record with JPA entity?

我正在尝试做类似下面的事情。

@Entity
@Table(name="Sample")
public record Sample(Integer id, String name) {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="user_id")
    private Integer id;

    @Column(name="username")
    private String name;

}

但是,它给我错误“记录中不允许用户声明的非静态字段 ID” 名称字段也一样。

有没有办法使用带有 JPA 注释的新 java 功能“记录”?

请参阅 Billy Korando 的文章 Using Records as Projections in JPA。以下是简要总结。

记录不能是实体

Jakarta Persistence (JPA; formerly Java Persistence API) implementations such as Hibernate depend on features either forbidden or not recommended by the JEP 395: Records 规范:无参数构造函数、非最终字段、setter 等

➥ 所以,不,记录不能用作 JPA Entity

记录的其他用途

您可以将记录用于:

  • CriteriaBuilder
  • TypedQuery
  • NativeQuery
  • 映射定义

Spring数据也有一些支持。

有关详细信息,请参阅上面链接的那篇文章,以及其他两篇文章的链接。