私は、hibernate-java8アドオンでhibernate 5を使用してLocalDateTime
フィールドを使用しています。今私は、単に特定の時間範囲内のユーザーのすべてのトランザクションを照会するHibernate:範囲を照会するためにLocalDateTimeを使用する
@Entity
public class Transaction {
// ...
private User user;
private LocalDateTime date;
// ..
}
:私は今のように日付フィールドを持つエンティティとユーザーフィールドを持っています。だから私は、次のクエリを使用します。十分な
SELECT t FROM Transaction t WHERE t.user = :owner AND t.date BETWEEN :from AND :to
奇妙なこのクエリは私に何も結果を与えるものではありません。私はまた、<
と>
演算子を使ってみましたが、どちらも役に立たなかった。時間範囲の部分を省略すると、ユーザーのトランザクションの正しい一覧が表示されます。 MySQLワークベンチでHibernateによって生成されたSQLクエリを実行すると、期待される結果も得られます。これは、単にクエリは、上記の提供
public <T> List<T> findList(Class<T> type, String queryName,
Map<String, Object> params) {
final EntityManager em = this.entityManager.get();
final TypedQuery<T> query = em.createNamedQuery(queryName, type);
params.forEach(query::setParameter);
return query.getResultList();
}
と呼ばれるなど、名前付きパラメータのマップ:持続私のテストケースで
findList(Transaction.class, Transaction.BY_USER_AND_RANGE,
ImmutableMap.of("owner", owner, "from", from, "to", to));
私は(名前の)クエリを実行するには、次のスニペットを使用します現在の日付との1つのトランザクションで、クエリの昨日から明日までの範囲を作成しました。 MySQLワークベンチのテーブルを調べると、トランザクションが存在し、日付フィールドに正しいタイプがあり、正しい値が入っていることがわかります。しかし、私のクエリは私に結果を与えません。
紛失しているものはありますか?
を助けるかもしれないからとの値は何ですか?からの論理的な説明はより大きい場合。または、あなたの日付がそれらの間にないこと。 –