我正在使用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”?
答案 0 :(得分:1)
我自己解决了这个, 必须编写我自己的自定义PersistentDateTimeAsString和AbstractMultiColumnDateTime类,这些类颠倒了2个字段的默认顺序。
时区现在是订单中的第一个,然后是日期时间。 所以sql现在看起来像这样:
order by
entity.lastUsedDateTimeStamp_TMZ,
entity.lastUsedDateTimeStamp asc limit ?