在我的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表中生成了以下列:
hbm2ddl.auto
create
timing
CREATE TABLE `timing` ( ... `moment` DATETIME NOT NULL, ... )
生成的CREATE TABLE包含DATETIME列。MySQL中的DATETIME仅具有秒精度,没有小数部分。为了启用小数部分(最高微秒),MySQL 5.6.4和更高版本启用 DATETIME(precision)列,例如DATETIME(3)具有毫秒级的精度。
CREATE TABLE
DATETIME(precision)
DATETIME(3)
我的问题是-有没有办法为使用hbm2ddl生成的时间字段指定精度?至少,这与jadira用户类型,java.sql或jdbc驱动程序机制有关吗?
PS 当我手动修改数据库表以具有我想要的精确列精度时,例如DATETIME(3),一切正常-写入和从数据库中读取joda DateTime的时间都以毫秒为单位。
使用可以为其使用 @ 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 属性,但是在文档中写道,该属性仅适用于小数。