javax - persistence:实体没有使用Java记录的主键



我试图使用Java记录创建实体类,但我得到错误消息实体没有主键"尽管我分配了一个ID注释。

import javax.persistence.*;
import java.time.LocalDate;
@Entity
public record Agent (
@Id
String code,
String name,
LocalDate date,
String workingArea,
String country,
String phoneNumber,
boolean licenseToKill,
int credits,
byte[] picture)
{}

这是怎么回事?

record不能用作Hibernate实体,因为它违反了JPA规范中实体的要求。将其改为class并使用@Immutable注释:

@Entity
@Immutable
public class Agent

只是为了完整性而清除答案(尽管@Turning85和@gkatiforis已经提供了正确的解释):

根据JPA规范,实体必须遵循以下要求:

  • 实体类需要是非final的,
  • 实体类需要有一个无参数的构造函数公共或受保护,
  • 实体属性必须是非final。

然而,正如本文所解释的,Java Record类型是这样定义的:

  • 关联的Java类是final,
  • 只有一个构造函数可以接受所有属性,
  • Java记录属性是最终的。

但是记录非常适合DTO投影,DTO投影通常用作存储在数据库中的数据的只读表示。更多信息- https://thorben-janssen.com/java-records-hibernate-jpa/

Entity类内部使用setter方法设置数据。As记录是不可变的。它只包含

<
  • 字段/gh><
  • all-args构造函数/gh>
  • getter
  • toString
  • <
  • equals、hashCode方法/gh>

而不是setter方法。所以我们不能使用record作为实体。

相关内容

  • 没有找到相关文章

最新更新