java - Hibernate 无法读取或写入 org.joda.time.LocalDate

标签 java mysql hibernate jodatime usertype

我正在使用 UserType 3.2.0-GA、Hibernate 4.3.8 与 AWS (RDS) 上的现有 mysql 实例进行通信。

我正在尝试从 Hibernate 3.2.6 和 joda-time-hibernate 1.1 升级应用程序。

失败的属性:

<property name="birthdate" not-null="true" type="org.joda.time.LocalDate"/>

型号:

import org.joda.time.LocalDate;
...
public LocalDate getBirthdate() {
    return this.birthdate;
}

尝试读取现有数据时出错:

org.hibernate.type.SerializationException: could not deserialize (Caused by: java.io.StreamCorruptedException: invalid stream header: 31393936)
org.hibernate.internal.util.SerializationHelper.doDeserialize(SerializationHelper.java:262)
org.hibernate.internal.util.SerializationHelper.deserialize(SerializationHelper.java:306)
org.hibernate.type.descriptor.java.SerializableTypeDescriptor.fromBytes(SerializableTypeDescriptor.java:155)
org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:130)
org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:44)
org.hibernate.type.descriptor.sql.VarbinaryTypeDescriptor$2.doExtract(VarbinaryTypeDescriptor.java:71)
org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:64)
org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:267)
org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:263)
org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253)
org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:338)
...
java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:804)

尝试写入新数据时出错:

WARN: SQL Error: 1292, SQLState: 22001
Apr 12, 2016 5:12:07 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Data truncation: Incorrect date value: '��' for column 'birthdate' at row 1
Apr 12, 2016 5:12:07 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper$StandardWarningHandler logWarning
WARN: SQL Warning Code: 1292, SQLState: HY000
Apr 12, 2016 5:12:07 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper$StandardWarningHandler logWarning
WARN: Incorrect date value: '��' for column 'birthdate' at row 1

org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; nested exception is org.hibernate.exception.DataException: could not execute statement

如您所见,我正在使用 Spring 来配置事物。我在 Spring 的 hibernate 属性是:

<bean id="hibernateProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="properties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
            <prop key="hibernate.generate_statistics">true</prop>
            <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.EhCacheRegionFactory</prop>
            <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
            <prop key="hibernate.cache.use_query_cache">true</prop>
            <prop key="jadira.usertype.autoRegisterUserTypes">true</prop>
        </props>
    </property>
</bean>

最佳答案

事实证明,我通过将类型设置为:

<property name="birthdate" not-null="true" type="org.jadira.usertype.dateandtime.joda.PersistentLocalDate"/>

不幸的是,我不明白为什么这有效,甚至是必要的。如果有更多解释就更好了。

关于java - Hibernate 无法读取或写入 org.joda.time.LocalDate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36604905/

相关文章:

java - java中的数据库驱动程序,在同一个jsp页面中插入更新删除

mysql - 如何使用逗号分隔值的交集进行选择?

java - 获取hibernate和mysql中的所有记录数和前100条记录

java - 在启动之前在SpringBoot中记录@ConfigurationProperties?

java - 使用 miglayout 设置宽度

java - 在 Android Eclipse IDE 中使用 ImageButton

mysql - Bundler::GemNotFound:无法在任何来源 9(logstash、elasticsearch)中找到 logstash-input-jdbc-4.2.1

java - 在 Java Spring/Hibernate/Maven 项目中测试多步骤过程的正确方法是什么?

java - 如何创建 QClass ,没有实体或与 QueryDSL 中的两个表关联

java - @Temporal 未按预期工作