我试图使用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)
{}
这有什么问题吗
3条答案
按热度按时间vu8f3i0k1#
record
不能用作Hibernate实体,因为它违反了JPA规范对实体的要求。将其设置为class
,并使用@Immutable
注解:o7jaxewo2#
只是为了完整性而清除答案(尽管@Turning85和@gkatiforis已经提供了正确的解释):
根据JPA规范,实体必须遵循以下要求:
然而,正如article所解释的那样,Java Record类型是这样定义的:
但是记录非常适合DTO投影,DTO投影通常用作存储在数据库中的数据的只读表示。更多信息-https://thorben-janssen.com/java-records-hibernate-jpa/
vof42yt13#
Entity
类内部使用setter方法来设置数据。因为记录是不可变的。它只包含而不是
setter
方法。所以我们不能使用record
作为实体。