Hibernate Joda DateTime排序

时间:2013-01-11 13:04:01

标签: hibernate jodatime spring-data-jpa

我正在使用Joda DateTime和用于hibernate 4的UserType库

我有一个带有以下字段的JPA实体

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

我使用普通的Spring Data JPA存储库,如下所示:

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

但是,当我查看hibernate在日志中抛出的sql时,结束如下:

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

这意味着排序不会按预期在lastUsedDateTimeStamp列上运行,因为“asc”关键字位于lastUsedDateTimeStamp_TMZ之后,而不是lastUsedDateTimeStamp。

是否有人知道如何修复它以便查询在正确的字段上指定“asc”?

1 个答案:

答案 0 :(得分:1)

我自己解决了这个, 必须编写我自己的自定义PersistentDateTimeAsString和AbstractMultiColumnDateTime类,这些类颠倒了2个字段的默认顺序。

时区现在是订单中的第一个,然后是日期时间。 所以sql现在看起来像这样:

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