在 H2 数据库中将 Joda DateTime 与 Hibernate 结合使用 - SQLError

Using Joda DateTime with Hibernate in H2 Database - SQLError

我正在使用 JPA - Hibernate 2.1 和 Joda DateTime。对于 DateTime 转换,我使用 org.jadira.usertype 来处理 Hibernate。这适用于使用 H2 内存数据库进行开发和本地测试。但是在我们的 Jenkins 服务器上,测试总是因一些奇怪的 SQLExceptions 而失败。

WARN  o.h.e.jdbc.spi.SqlExceptionHelper - SQL Error: 90003, SQLState: 90003
ERROR o.h.e.jdbc.spi.SqlExceptionHelper - Hexadecimal string with odd number of characters: "2015-01-22 14:15:52.965"; SQL statement:

并且:

WARN  o.h.e.jdbc.spi.SqlExceptionHelper - SQL Error: 90004, SQLState: 90004
ERROR o.h.e.jdbc.spi.SqlExceptionHelper - Hexadecimal string contains non-hex character: "2015-01-22 14:15:52.98"; SQL statement:

很难找出为什么它在我的笔记本电脑上运行而不是在服务器上运行。唯一的区别是服务器在 Ubuntu VM 上 运行 而我使用的是 Windows 8.1 - 我是否需要考虑诸如OpenJDK 会导致问题吗?或者这是一个已知的 H2 DB 问题 - 但我能找到任何东西吗? 知道为什么以及我能做些什么来解决它吗?

谢谢!

导致问题的字段:

@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)//tried to remove this without success
private DateTime lastSeen;

persistence.xml - JPA 属性。

<property name="jpaProperties">
        <props>
            <prop key="hibernate.hbm2ddl.auto">create-drop</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop>
            <prop key="hibernate.connection.CharSet">utf-8</prop>
            <prop key="hibernate.connection.characterEncoding">utf-8</prop>
            <prop key="hibernate.connection.useUnicode">true</prop>
            <prop key="hibernate.hbm2ddl.import_files">test-import.sql</prop>
            <prop key="jadira.usertype.autoRegisterUserTypes">true</prop>
        </props>
    </property>

我认为您错过了 @Column@Type 注释:

@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private DateTime lastSeen;