1

我正在尝试使用 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)
          {}

这有什么问题?

4

2 回答 2

0

Arecord不能用作 Hibernate 实体,因为它根据 JPA 规范打破了实体的要求。制作它class并改用@Immutable注释:

@Entity
@Immutable
public class Agent
于 2021-10-30T19:04:54.943 回答
0

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

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

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

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

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

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

于 2021-10-31T15:32:34.483 回答