我在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
答案 0 :(得分:1)
由于DateTime
是您自己的类型,您需要:
UserType
(基本上是用于将SQL类型转换为您自己的POJO类型的Hibernate适配器)映射属性。java.util.Date
或java.sql.Timestamp
另请注意,如果您需要保留日期时间数据的“时间”部分,则需要使用Hibernate.TIMESTAMP
作为标量类型(但是这假设您正在使用其中一个标准Java类型)。
编辑:要完成#1,请实现UserType
interface(假设您在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略有不同,但原理是相同的。