【问题标题】:How to save UTC (instead of local) timestamps for Hibernate Envers revision info?如何为 Hibernate Envers 修订信息保存 UTC(而不是本地)时间戳?
【发布时间】:2016-06-10 12:19:48
【问题描述】:

使用 Hibernate/Envers,如何:

  1. 为 Hibernate Envers 修订信息保存 UTC(而不是本地)时间戳?
  2. 获取时间戳作为 LocalDateTime (Java 8)?

【问题讨论】:

    标签: hibernate timestamp utc hibernate-envers


    【解决方案1】:

    1) 从修订监听器中,调用修订的fixTimezone方法,如下所示。

    2) 要获取它为LocalDateTime,请使用getRevisionDate 方法,如下所示。

    public class MyRevisionListener
        implements RevisionListener {
    
        @Override
        public void newRevision(Object revisionEntity) {
            MyRevision revision = (MyRevision)revisionEntity;
            revision.fixTimezone();
            }
        }
    
    @Entity
    @RevisionEntity (MyRevisionListener.class)
    public class MyRevision
          implements Serializable {
    
        @Id
        @GeneratedValue
        @RevisionNumber
        private long id;
    
        @RevisionTimestamp
        @Temporal (TemporalType.TIMESTAMP)
        @Column (nullable = false)
        private Date date;
    
        private static final ZoneId ZONE_ID_UTC = ZoneId.of("UTC");
    
        public void fixTimezone() {
            LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZONE_ID_UTC);
            date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
            }
    
        @NotNull
        public LocalDateTime getRevisionDate() {
            return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
            }
    
        ...
        }
    

    相关的休眠问题:

    【讨论】:

      猜你喜欢
      • 2013-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-05
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多