一尘不染

MySQL DATETIME精度(joda-time,Hibernate,org.jadira.usertype,hbm2ddl)

hibernate

在我的hibernate-4实体中,我正在使用建议的jadira
usertypes
映射一个joda-time
DateTime属性:

@Entity
@Table(name="timing")
public class TimingEntity {
    ...
    @Basic(optional=false)
    @Column(name="moment")
    @Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
    public DateTime getMoment() {
       ...

我的数据库是MySQL。将hibernate属性hbm2ddl.auto设置为createvalue时,我在timing表中生成了以下列:

CREATE TABLE `timing` (
    ...
   `moment` DATETIME NOT NULL,
    ...
)

生成的CREATE TABLE包含DATETIME列。MySQL中的DATETIME仅具有秒精度,没有小数部分。为了启用小数部分(最高微秒),MySQL
5.6.4和更高版本启用
DATETIME(precision)列,例如DATETIME(3)具有毫秒级的精度。

我的问题是-有没有办法为使用hbm2ddl生成的时间字段指定精度?至少,这与jadira用户类型,java.sql或jdbc驱动程序机制有关吗?

PS 当我手动修改数据库表以具有我想要的精确列精度时,例如DATETIME(3),一切正常-写入和从数据库中读取joda
DateTime的时间都以毫秒为单位。


阅读 307

收藏
2020-06-20

共1个答案

一尘不染

使用可以为其使用 @
Column#columnDefinition

属性

@Basic(optional=false)
@Column(name="moment" columnDefinition="DATETIME(3) NOT NULL")
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
public DateTime getMoment() 
{   
   ...

您也可以尝试使用 @
Column#precision

属性,但是在文档中写道,该属性仅适用于小数。

2020-06-20