java - org.hibernate.MappingException - 复合 id

标签 java spring spring-boot jpa spring-data-jpa

在我的 Spring boot - JPA 应用程序中,我正在尝试实现复合键:

@Entity
public class User 
{
    @Id
    private String timeStamp;
    @Id
    private String firstName;
    @Id
    private String lastName;
}

这给了我错误,说:

Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Composite-id class must implement Serializable: com.mua.testkeys.model.User

即使我实现了Serialized,它也会给我错误。

我该如何解决这个问题?

使用:Spring + JPA + H2

最佳答案

可以使用 @IdClass 创建复合 key ,如下所示。
用户.class

@IdClass(UserPK.class)
@Table(name = "user")
@Entity
public class User {
    @Id
    private String timeStamp;
    @Id
    private String firstName;
    @Id
    private String lastName;
//remaining fields
// getters and setters
}

UserPK.class

public class UserPK {
    private String timeStamp;
    private String firstName;
    private String lastName;
// constructors
// getters and setters
//implement euquels() and hashcode()
}
  1. 为主键定义一个类,并将所有键作为字段。
  2. 实现 equals()hashcode() 方法。
  3. 使用 @IdClass(UserPK.class) 注释 User 类
  4. 使用 @Id 注释声明 Id 字段

关于java - org.hibernate.MappingException - 复合 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59209739/

相关文章:

java - 如何在单行中绘制具有不同颜色的折线图

java - 如何处理java URI密码中的 "@"?

javascript - 在 Firefox 的选项卡中显示 pdf 内容

java - Hibernate,当我使 id 列自动递增时,sql 出现错误

java - 日志记录在 Spring Boot (Gradle) 中不起作用

java - 如何从 protobuf 中的 UnmodifiableList 中删除一个项目

java - 解码 JSON,其中标签是值

java - Spring状态机嵌套机器同步运行

maven - Gradle Maven-publish无法构建独立的Spring-boot应用程序

java - Spring Boot启动后如何获取所有端点列表