2013-08-17 77 views
0

我的財產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 

回答

1

由於DateTime是你自己的類型,你要麼需要:

  1. 使用自定義UserType(這基本上是一個Hibernate適配器轉換SQL類型到自己的POJO類)映射屬性
  2. 變化對應的屬性到該休眠瞭解到,像java.util.Datejava.sql.Timestamp
  3. 使用上述
  4. 的組合的類型

另外請注意,您將需要使用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)); 

注意,這些代碼段用於休眠略有4.x的改變,但原理是一樣的。

+0

可以請詳細說明第一個選項,如果可能的話,或者更新我的帖子,請提前致謝 –

+0

更多關於hibenate適配器,它是如何工作的以及我的prblm的解決方案 –

+0

您好,請稍等。將SQL類型轉換爲您自己的POJO類型的適配器 –