2010-12-03 17 views
3

J'ai une situation. J'ai deux types de date dans la base de données mysql. L'un est la date et l'autre est datetime. Maintenant, dans les critères d'hibernation, je dois vérifier si une date est plus grande que l'autre ou non?Comment convertir le type de date dans les critères d'hibernation

criteria.add (Restrictions.lt ("award.deadline", "submission.date_received"));

Mais les différents types causent des problèmes montrant "java.lang.ClassCastException: java.lang.String ne peut pas être converti en java.util.Date".

Même j'ai essayé de l'analyser à l'aide de l'analyseur de date mais il ne prend pas comme date car il prend comme chaîne seulement. Alors, pouvez-vous me dire comment pouvons-nous convertir une date en un type différent dans les critères d'hibernation?

Répondre

5

Le problème est que Restrictions.lt(String propertyName, Object value) est la mauvaise restriction. Ce dont vous avez besoin est Restrictions.ltProperty(String propertyName, String otherPropertyName).

Explication:

  • Restrictions.lt(String propertyName, Object value) est de comparer une propriété d'entité avec une valeur spécifique
  • Restrictions.ltProperty(String propertyName, String otherPropertyName) est de comparer un deux propriétés d'entité

Si vous utilisez Restrictions.lt("Y", "X") et « Y » est le nom d'une propriété date, alors hibernate essaierait de traduire "X" en une Date (pas en un nom de colonne), et analyser "X" en une Date est, disons, un peu compliqué - donc l'Exception est augmentée.

+0

Merci Ralph pour votre précieuse réponse. – dhiraj