2

我正在使用 Joda DateTime 和休眠 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”?

4

1 回答 1

2

自己解决了这个问题,必须编写我自己的自定义 PersistentDateTimeAsString 和 AbstractMultiColumnDateTime 类来反转 2 个字段的默认顺序。

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

order by
        entity.lastUsedDateTimeStamp_TMZ,
        entity.lastUsedDateTimeStamp asc limit ?
于 2013-01-13T12:23:53.850 回答