5

ORMにhibernate(annotations)/mysqlの組み合わせを使用するアプリケーションがあります。そのアプリケーションでは、日付フィールドを持つエンティティを取得しました。hh:mm:ss時間範囲内で(日付部分なしで)その日付を選択する方法を探しています。

MySQLにTIME(expression)は、時間部分を抽出してwhere句で使用できる関数がありますが、ネイティブクエリに切り替えずにHibernateで使用できるようには見えません。これを行うための休止状態のオプションはありますか、それともJavaで結果をループして、そこで比較を行う必要がありますか?とにかくインデックスを使用しないので、これはMySQLソリューションよりもはるかに遅くなりますか?

4

2 に答える 2

4

次の関数は HQL で使用できます。おそらくそれらを使用できます。

second(...), minute(...), hour(...), day(...), month(...), year(...)

于 2008-09-19T12:54:50.437 に答える
1

完全なネイティブ クエリを使用するのではなく、式を SQL 制限として追加します。特にMySQLについてはわかりませんが、次のようなものを想像してください。

Criteria criteria = session.createCriteria(MyTable.class);
criteria.add( 
  Expression.sql(
    "TIME( {alias}.my_date, 'hh:mm:ss') >= :1", 
    dateRangeMin, 
    new StringType()
  )
);
于 2008-09-19T12:59:28.880 に答える