如何为Hibernate Envers版本信息保存UTC(而不是本地)时间戳?

如何为Hibernate Envers版本信息保存UTC(而不是本地)时间戳?,hibernate,timestamp,utc,hibernate-envers,Hibernate,Timestamp,Utc,Hibernate Envers,使用Hibernate/Envers,如何: 是否为Hibernate Envers版本信息保存UTC(而不是本地)时间戳 是否将时间戳作为LocalDateTime(Java8)获取 1) 从修订侦听器中,调用修订的fixTimezone方法,如下所示 public class MyRevisionListener implements RevisionListener { @Override public void newRevision(Object revisi

使用Hibernate/Envers,如何:

  • 是否为Hibernate Envers版本信息保存UTC(而不是本地)时间戳
  • 是否将时间戳作为LocalDateTime(Java8)获取
  • 1) 从修订侦听器中,调用修订的
    fixTimezone
    方法,如下所示

    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());
            }
    
        ...
        }
    
    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());
            }
    
        ...
        }
    
    相关Hibernate问题: