0

我在 pojo 中有以下类型的属性:

private DateTime updateddate;

现在我必须将其类型设置为休眠查询也请建议将是什么类型。

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
4

1 回答 1

1

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

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

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

编辑:要完成#1,请实现UserType接口(假设您Hibernate.DATE在 OP 中使用的版本 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 中略有变化,但原理是相同的。

于 2013-08-17T16:59:30.163 回答