hibernate中的数据类型异常



我在pojo中有一个类型为的属性

private DateTime updateddate;

现在我必须将它的类型设置为hibernate查询,还请建议将是什么类型。

addScalar("updateddate",Hibernate.DATE)

它正在抛出此异常。

org.hibernate.property.BasicPropertyAccessor    IllegalArgumentException in class:  setter method of property: updateddate
2013-08-17 16:41:08.252 ERROR   [NDC=]  [Thread-73] org.hibernate.property.BasicPropertyAccessor    expected type: com.rbsfm.ice.common.date.DateTime, actual value: java.sql.Time

由于DateTime是您自己的类型,您需要:

  1. 使用自定义UserType映射属性(它基本上是一个Hibernate适配器,用于将SQL类型转换为您自己的POJO类型)
  2. 将映射的属性更改为Hibernate能够理解的类型,如java.util.Datejava.sql.Timestamp
  3. 使用以上组合

还要注意,如果您需要保留日期-时间数据的"时间"部分,则需要使用Hibernate.TIMESTAMP作为标量类型(,但这假设您使用的是标准Java类型之一)。

编辑:为了完成#1,实现UserType接口(假设在OP中使用Hibernate.DATE的版本3),并通过以下方式将其映射到您的字段(假设XML映射):

<hibernate-mapping>
    <typedef name="dateTimeUserType" class="your.custom.DateTimeUserType"/>
    <class ...>
        <!-- rest of mapping here -->
        <property name="updateddate" type="dateTimeUserType" column="UpdatedDate"/>
    </class>
</hibernate-mapping>

然后,您也应该能够使用标量的自定义类型:

query.addScalar("updateddate", Hibernate.custom(your.custom.DateTimeUserType.class));

注意,Hibernate 4.x的这些代码片段略有变化,但原理是相同的。

相关内容

最新更新