[java] Comparer la partie temporelle du champ datetime dans Hibernate


Answers

Ajoutez l'expression en tant que restriction SQL plutôt que d'avoir une requête native complète. Je ne connais pas spécifiquement MySQL, mais imaginez quelque chose comme ça:

Criteria criteria = session.createCriteria(MyTable.class);
criteria.add( 
  Expression.sql(
    "TIME( {alias}.my_date, 'hh:mm:ss') >= :1", 
    dateRangeMin, 
    new StringType()
  )
);
Question

J'ai une application qui utilise une combinaison hibernate (annotations) / mysql pour ORM. Dans cette application, j'ai obtenu une entité avec un champ Date. Je cherche un moyen de sélectionner cette date dans un intervalle de temps (donc hh: mm: ss sans la partie date).

En MySQL il y a une fonction TIME (expression) qui peut extraire la partie time et l'utiliser dans la clause where, mais qui ne semble pas disponible dans Hibernate sans passer aux requêtes natives. Y at-il une option dans hibernate pour faire ceci, ou devrais-je passer en revue les résultats dans Java et faire la comparaison là? Serait-ce beaucoup plus lent que la solution MySQL, puisque cela n'utiliserait pas d'index?




Related