使用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
吗? - 或者我可以让它调用我的代码,所以我可以自己分配它?
- Spring 3.1.1用hibernate 4.1注释配置
- Hibernate / JPA,保存新实体,同时仅在@OneToOne关联上设置id
- 如何在Hibernate中映射一组枚举类型?
- org.hibernate.Session.clear()被认为有害吗?
- org.hibernate.LazyInitializationException:无法初始化代理 – 没有会话?
- Hibernate @ElementCollection – 需要更好的解决方案
- 使用Transformer时HibernateexceptionPropertyNotFoundException
- Maven + SLF4J:使用需要两个不同SLF4J版本的两个不同依赖项时版本冲突
- 仅将日期的日期部分与hibernate中的时间戳进行比较