2013-01-11 143 views
2

我使用喬達日期時間和用戶類型庫休眠4休眠喬達日期時間排序

我有以下領域的JPA實體

@Columns(columns = { @Column(name = "lastUsedDateTimeStamp"), @Column(name = "lastUsedDateTimeStamp_TMZ") }) 
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTimeAsString") 
private DateTime lastUsedDateTimeStamp; 

我使用的是普通Spring數據JPA庫如下:

return repository.findAll(new PageRequest(0,5,new Sort(Sort.Direction.DESC,「lastUsedDateTimeStamp」)))。getContent();

然而,當我看着冬眠拋出在它結束,因爲日誌的SQL如下:

order by 
     entity.lastUsedDateTimeStamp, 
     entity.lastUsedDateTimeStamp_TMZ asc limit ? 

這意味着,排序上沒有lastUsedDateTimeStamp列按預期工作,爲「ASC」關鍵字在lastUsedDateTimeStamp_TMZ之後,而不是lastUsedDateTimeStamp。

有誰知道我該如何修復它,以便查詢在正確的字段上指定「asc」?

回答

1

自己解決了這個問題, 必須編寫自己的自定義PersistentDateTimeAsString和AbstractMultiColumnDateTime類,這些類顛倒了2個字段的默認順序。

時區現在是第一個順序,然後是日期時間。 因此,現在的SQL看起來像這樣:

order by 
     entity.lastUsedDateTimeStamp_TMZ, 
     entity.lastUsedDateTimeStamp asc limit ? 
+0

任何機會,你可以添加您的自定義類到這個答案? –