【问题标题】:Hibernate @CreationTimestamp @UpdateTimestamp for Calendar休眠 @CreationTimestamp @UpdateTimestamp 用于日历
【发布时间】:2017-02-21 12:00:56
【问题描述】:

在我的实体中,我有字段:

@UpdateTimestamp
@Column
private java.util.Calendar modifiedDate;
@CreationTimestamp
@Column
private java.util.Calendar createdDate;

这些字段由休眠更改。我看到结果保存到数据库。在没有时间的数据库中保存数据,我如何解释休眠日历应该与当前日期时间一起保存?


附: 我看到了诸如方法注释之类的解决方法@PreUpdate@PrePersist 我不认为我需要这些。

【问题讨论】:

    标签: java hibernate jpa orm


    【解决方案1】:

    根据有关日历数据类型的 JPA 规范:

    @Temporal - 必须为持久字段或属性指定此注释 类型为 java.util.Date 和 java.util.Calendar。

    在您的情况下,您应该使用:

    @Temporal(TemporalType.TIMESTAMP)
    

    两个字段。

    另一种解决方案是简单地从 java.util.Calendar 更改为 java.sql.Timestamp:

    @UpdateTimestamp
    @Column
    private java.sql.Timestamp modifiedDate;
    @CreationTimestamp
    @Column
    private java.sql.Timestamp createdDate;
    

    【讨论】:

      【解决方案2】:

      我认为您可以使用 @CreationTimestamp@UpdateTimestamp 注释,但您必须将 TemporalType 指定为时间戳。

      @CreationTimestamp
      @Temporal(TemporalType.TIMESTAMP)
      @Column(name = "createdDate")
      private java.util.Calendar createdDate;
      
      @UpdateTimestamp
      @Temporal(TemporalType.TIMESTAMP)
      @Column(name = "modifiedDate")
      private java.util.Calendar modifiedDate;
      

      否则,如您所说,您可以使用@PrePersist@PreUpdate,如下所示:

      @PrePersist
      protected void onCreate() {
        created = Calendar.getInstance();
      }
      
      @PreUpdate
      protected void onUpdate() {
        updated = Calendar.getInstance();
      }
      

      【讨论】:

        【解决方案3】:

        我已经考虑过通过 spring 的替代解决方案,它工作正常,并且易于在测试中转移数据。 Original description.

        【讨论】:

          猜你喜欢
          • 2017-02-11
          • 2019-04-09
          • 2020-04-05
          • 1970-01-01
          • 2023-03-29
          • 2011-11-06
          • 2010-10-07
          • 1970-01-01
          相关资源
          最近更新 更多