使用java.util.Date对象作为主键

时间:2017-12-28 09:37:35

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

我想使用Date对象作为主键。但我有一个错误。如何使用java.util.Date对象作为主键?

MyEntity:

@Entity
public class MyEntity implements Serializable {

    @Id
    private Date date;
...

错误日志:

  

引起:   org.springframework.beans.factory.UnsatisfiedDependencyException:   创建名为“myService”的bean时出错:不满意的依赖项   通过字段'myEntityRepository'表示;嵌套异常   是org.springframework.beans.factory.BeanCreationException:错误   创建名为'routeMeetingDayRepository'的bean:调用   init方法失败;嵌套异常是   java.lang.IllegalArgumentException:这个类[类   com.MyEntity] 没有   定义IdClass

所以,我在我的实体中添加了@IdClass:

MyEntity:

@Entity
@IdClass(Date.class)
public class MyEntity implements Serializable {

    @Id
    private Date date;
...

新错误日志:

  

启动ApplicationContext时出错。显示自动配置   报告在启用“debug”的情况下重新运行您的应用程序。 2017年12月28日   11:49:00.859 ERROR 23518 --- [主要]   o.s.boot.SpringApplication:应用程序启动失败

     

org.springframework.beans.factory.BeanCreationException:错误   在类路径中定义名为'entityManagerFactory'的bean   资源   [组织/ springframework的/引导/自动配置/ ORM / JPA / HibernateJpaAutoConfiguration.class]:   调用init方法失败;嵌套异常是   org.hibernate.AnnotationException: java.util.Date没有持久性   id属性
  ...
  ......

     

引起:   org.hibernate.AnnotationException: java.util.Date没有持久性   id属性   ...

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,很容易解决。

只需在PK之前添加此@Temporal(TemporalType.DATE)即可。 应用程序需要在此字段中添加值,因为它不是自动生成的。

@Id
@Temporal(TemporalType.DATE)
private Date date;