2

Hibernate4にJodaDateTimeとUserTypeライブラリを使用しています

次のフィールドを持つJPAエンティティがあります

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

私は通常のSpringDataJPAリポジトリを次のように使用しています。

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 ?

これは、「asc」キーワードがlastUsedDateTimeStampではなくlastUsedDateTimeStamp_TMZの後にあるため、ソートがlastUsedDateTimeStamp列で期待どおりに機能していないことを意味します。

クエリが正しいフィールドに「asc」を指定するように修正する方法を知っている人はいますか?

4

1 に答える 1

2

これを自分で解決し、2つのフィールドのデフォルトの順序を逆にする独自のカスタムPersistentDateTimeAsStringクラスとAbstractMultiColumnDateTimeクラスを作成する必要がありました。

これで、タイムゾーンが最初に順番になり、次に日時になります。したがって、SQLは次のようになります。

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