当前位置: 首页 > 面试题库 >

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

彭烨烁
2023-03-14
问题内容

在我的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的时间都以毫秒为单位。


问题答案:

使用可以为其使用 @
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

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



 类似资料:
  • JodaTime 提供了一组Java类包用于处理包括ISO8601标准在内的date和time。可以利用它把JDK Date和Calendar类完全替换掉,而且仍然能够提供很好的集成。 Joda-Time主要的特点包括: 1. 易于使用:Calendar让获取"正常的"的日期变得很困难,使它没办法提供简单的方法,而Joda-Time能够 直接进行访问域并且索引值1就是代表January。 2. 易

  • 问题内容: 我在我的游戏应用程序中使用Jodatime,但目前不必做来回转换自/至一束和。 由于jodatime已包含在Play发行版中,因此我认为可能有更好的方法来执行此操作。有什么方法可以代替Model字段,从而自动完成转换?还有另一种方法可以简化吗? 问题答案: 对于Hibernate 3,在日期字段中添加以下注释: Hibernate现在将为您完成肮脏的工作。 (确保您的类路径中有joda

  • 问题内容: 如何编写JAX-WS服务,以便我的@WebMethod的@WebParam是类似于DateTime的Joda- Time类?参数上的@XmlTypeAdapter是否可以工作?我正在部署到GlassFish 2.1。 让我澄清这个问题,因为到目前为止,这两个答案都集中在将自定义类型绑定到现有的JAXB类上,这与之相关,但与我要问的问题无关。如何使以下@WebService接受joda

  • 问题内容: 我现在有一个奇怪的问题。当我将今天的日期插入数据库时​​,它映射到昨天的日期,它随每个日期发生。例如,当我尝试插入2016-09-02时,数据库将其另存为2016-09-01。这是我的映射: 我创建实例是通过 尝试在控制台上将值保存到数据库中之前打印出来的,并且它可以正确打印出来,但是数据库中的值是从前一天开始的://因此问题出在hibernate映射还是mysql。我用这种方法将日期

  • 问题内容: javdoc的内容如下: 从v1.5开始,由于下面详述的异常,建议您避免使用DateMidnight并使用toDateTimeAtStartOfDay()代替。 如果默认时区在午夜切换为夏时制,并且此LocalDate表示该切换日期,则此方法将引发异常。问题在于,在规定的日期没有午夜这样的时间,因此会引发异常。 午夜在某些时区中不存在的事实似乎足以避免完全使用(假设您的代码未使用固定的

  • 问题内容: 我有Joda-Time 对象的列表。 如何在每个间隔的开始日期对间隔进行排序。间隔不重叠 问题答案: 只需创建一个按开始时间进行比较的: 然后使用该排序: