2013-01-11 144 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

任何机会,你可以添加您的自定义类到这个答案? –