使用JodaTime Instant进行Hibernate版本控制

使用java.time.Instant和Hibernate一起工作(我使用的是hibernate-java8 , 这里给出了更多的解决方案)。 使用它作为@Version是一个问题。

我正在使用Hibernate 5.1.7.Final(传统和JPA的混合)注释。 我的实体使用版本

 @javax.persistence.Version @javax.persistence.Column( columnDefinition="TIMESTAMP(3) DEFAULT '2016-01-01'") private Instant mytimestamp; 

MySQL解释为

 `mytimestamp` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) 

这太疯狂了,但不是我的观点。

我想知道Hibernate如何分配mytimestamp ,如果我可以改变方式并且我可以检索该值。 看起来所有三个答案都是“不”。

  • Hibernate不分配mytimestamp ; 它由MySQL分配ON UPDATE 。 这不适用于不支持此hack的数据库。 我想知道这是故意还是偶然的。
  • 所以我添加@org.hibernate.annotations.Source(SourceType.VM)只是为了发现版本生成使用TimestampType.seed(SessionImplementor session)返回新的java.sql.Timestamp ,它不能分配给一个字段输入Instant 。 使用SourceType.DB ,我得到DbTimestampType ,它是TimestampType的子类,导致相同的exception。
  • 我没有看到如何在没有额外查询的情况下检索时间戳。

所以我的问题:

  • 我可以让Hibernate分配Instant mytimestamp吗?
  • 或者我可以让它调用我的代码,所以我可以自己分配它?