Javax-Persistance:实体没有使用 Java 条记录的主键
Javax-Persistance : Entity does not have a primary key using Java records
我正在尝试使用 Java 记录创建实体 class,但我收到错误消息
“实体没有主键”虽然我分配了一个 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)
{}
这有什么问题?
A record
不能用作 Hibernate 实体,因为它违反了 JPA 规范对实体的要求。使其成为 class
并改用 @Immutable
注释:
@Entity
@Immutable
public class Agent
只是为了完整性清除答案(尽管@Turning85 和@gkatiforis 已经提供了正确的解释):
根据 JPA 规范,实体必须遵循以下要求:
- 实体class需要是非最终的,
- 实体 class 需要有一个无参数的构造函数,它是
public 或受保护,
- 实体属性必须是非最终的。
但是,正如这个 article 所解释的,Java 记录类型定义如下:
- 关联的 Java class 是最终的,
- 只有一个构造函数接受所有属性,
- Java 记录属性是最终的。
但是记录非常适合 DTO 投影,它通常用作存储在数据库中的数据的只读表示。
更多信息 - https://thorben-janssen.com/java-records-hibernate-jpa/
我正在尝试使用 Java 记录创建实体 class,但我收到错误消息 “实体没有主键”虽然我分配了一个 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)
{}
这有什么问题?
A record
不能用作 Hibernate 实体,因为它违反了 JPA 规范对实体的要求。使其成为 class
并改用 @Immutable
注释:
@Entity
@Immutable
public class Agent
只是为了完整性清除答案(尽管@Turning85 和@gkatiforis 已经提供了正确的解释):
根据 JPA 规范,实体必须遵循以下要求:
- 实体class需要是非最终的,
- 实体 class 需要有一个无参数的构造函数,它是 public 或受保护,
- 实体属性必须是非最终的。
但是,正如这个 article 所解释的,Java 记录类型定义如下:
- 关联的 Java class 是最终的,
- 只有一个构造函数接受所有属性,
- Java 记录属性是最终的。
但是记录非常适合 DTO 投影,它通常用作存储在数据库中的数据的只读表示。 更多信息 - https://thorben-janssen.com/java-records-hibernate-jpa/