我可以在 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数据也有一些支持。
有关详细信息,请参阅上面链接的那篇文章,以及其他两篇文章的链接。
我正在尝试做类似下面的事情。
@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数据也有一些支持。
有关详细信息,请参阅上面链接的那篇文章,以及其他两篇文章的链接。