我在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
是您自己的类型,您需要:
- 使用自定义
UserType
映射属性(它基本上是一个Hibernate适配器,用于将SQL类型转换为您自己的POJO类型) - 将映射的属性更改为Hibernate能够理解的类型,如
java.util.Date
或java.sql.Timestamp
- 使用以上组合
还要注意,如果您需要保留日期-时间数据的"时间"部分,则需要使用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的这些代码片段略有变化,但原理是相同的。