Using java.time.Instant
与 Hibernate 一起工作(我正在使用hibernate-java8
,给出了更多的解决方案here https://stackoverflow.com/a/26455446/581205)。使用它作为@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
;它被分配ON UPDATE
由 MySQL 提供。这不适用于不支持此 hack 的数据库。我想知道这是有意为之还是只是偶然。
- 所以我添加了
@org.hibernate.annotations.Source(SourceType.VM)
才发现版本生成使用TimestampType.seed(SessionImplementor session)
返回新的java.sql.Timestamp
,不能分配给类型的字段Instant
. With SourceType.DB
, I get DbTimestampType
,它是一个子类TimestampType
导致同样的异常。
- 我不知道如何在没有额外查询的情况下检索时间戳。
所以我的问题是:
- 我可以让 Hibernate 分配吗
Instant mytimestamp
?
- 或者我可以让它调用我的代码,这样我就可以自己分配它吗?
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)