Joda DateTime hibernate映射弹簧形式

时间:2013-09-14 20:09:30

标签: sql spring hibernate datetime jodatime

我正在尝试将DateTime对象映射到TimeStamp SQL列。

import org.springframework.format.annotation.DateTimeFormat;
...

    @Column
    @Type(type="org.joda.time.contrib.hibernate.PersistentDateTime")
    @DateTimeFormat(style="SS")
    private DateTime dateSmoked;

我正在使用Spring表单标签让用户根据@DateTimeFormat(style =“SS”)输入“mm / dd / YYYY HR:MIN AM / PM”类型的日期输入。我已经导入了joda-time-hibernate包和所有其他必需的包

当我提交表单时,我收到以下错误: org.joda.time.contrib.hibernate.PersistentDateTime.nullSafeSet(Ljava / SQL / PreparedStatement的; Ljava /郎/对象; ILorg /休眠/发动机/ SPI / SessionImplementor;)V

很清楚我做错了什么。有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:5)

看起来您正在使用 Hibernate 4。+ Joda-Time Hibernate不支持此Hibernate版本 您可以使用Jadira Framework中的usertype: PersistentDateTime doc

    @Column
    @Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
    @DateTimeFormat(style="SS")
    private DateTime dateSmoked;

maven依赖

<dependency>
    <groupId>org.jadira.usertype</groupId>
    <artifactId>usertype.jodatime</artifactId>
    <version>2.0.1</version>
</dependency>

答案 1 :(得分:1)

当使用Hibernate的 4.3.5.Final 版本(创建后的最后一个版本)时,我遇到了同样的问题。如前所述,您必须使用Jadira Framework

Java的代码:

private DateTime creationDate;

@Column(name = "CREATION_DATE")
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
public DateTime getCreationDate() {
    return creationDate;
}

我的pom.xml与Hibernate相关的部分:

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-core</artifactId>
  <version>4.3.5.Final</version>
</dependency>
<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-entitymanager</artifactId>
  <version>4.3.5.Final</version>
</dependency>
<dependency>
  <groupId>org.hibernate.common</groupId>
  <artifactId>hibernate-commons-annotations</artifactId>
  <version>4.0.4.Final</version>
</dependency>

我的pom.xml与JodaTime相关的部分:

<dependency>
  <groupId>joda-time</groupId>
  <artifactId>joda-time</artifactId>
  <version>2.7</version>
</dependency>
<dependency>
  <groupId>org.jadira.usertype</groupId>
  <artifactId>usertype.jodatime</artifactId>
  <version>2.0.1</version>
</dependency>

创建所需表格的SQL脚本(注意 TIMESTAMP 类型):

CREATE TABLE dropbox.MAPPING (ID INT NOT NULL AUTO_INCREMENT, DROPBOX_URL VARCHAR(300) NOT NULL, SHORTENED_URL VARCHAR(30) NOT NULL, CREATION_DATE TIMESTAMP NOT NULL, UNIQUE UQ_MAPPING (ID), PRIMARY KEY (ID));