IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

[Criteria] Problème de date


Sujet :

Hibernate Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2007
    Messages : 71
    Points : 62
    Points
    62
    Par défaut [Criteria] Problème de date
    Bonjour à tous,

    je souhaite créer une recherche par date à l'aide de Criteria sur un objet de type ContactPartenariat. Lors de l'exécution de la requête criteria.list(), il me retourne cependant constamment une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    java.lang.ClassCastException: java.lang.String
         at org.hibernate.type.TimestampType.toString(TimestampType.java:55)
         at org.hibernate.type.NullableType.nullSafeToString(NullableType.java:93
    )
    (...)
    Voici le code que j'utilise pour passer les dates en paramètres de la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    criteria.add(Restrictions.ge("part.dateDemande", sdf.format(searchedPartenariat.getDateDemande()) + " 00:00:00"));
     
    GregorianCalendar calendar = new GregorianCalendar();
    calendar.setTime(searchedPartenariat.getDateDemande());
    calendar.add(Calendar.DATE, 1);
     
    criteria.add(Restrictions.lt("part.dateDemande", sdf.format(calendar.getTime()) + " 00:00:00"));
    Le champ dateDemande est mappé en tant que timestamp auprès de Hibernate, mais le problème est le même avec le type date.

    Je précise que je vois la requête SQL qui est générée, et qui fonctionne correctement si je l'exécute manuellement sur MySQL en lui passant les bonnes valeurs. Il s'agit donc d'un problème de transformation de dates.

    J'ai vu sur Internet que certains passaient par une fonction perso transformDate, donc je suppose que le format des dates est spécial. Mais lequel ?
    Merci d'avance à vous,
    MiniMarch

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    et si tu passes ta date en paramètre sans la convertir en string ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2007
    Messages : 71
    Points : 62
    Points
    62
    Par défaut
    gnnnnnn.... OK. ça ça marche.

    Mon problème c'est que je dois chercher tous les enregistrements dont la date est -tel jour-. Le problème c'est que dans la base, c'est un champ datetime, et j'ai donc l'heure en plus.

    Comment est-ce que je peux être sûr que mes paramètres date/calendar ne prennent bien en compte que la date et non l'heure avec ? Dans la sélection, c'est tout de même assez important...

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2007
    Messages : 71
    Points : 62
    Points
    62
    Par défaut
    Petite précision parce que c'est pas clair : pour les valeurs des paramètres de la requête SQL, je ne dispose que de la date, et non de l'heure...

    ça devrait aller un peu mieux comme ça.

  5. #5
    Membre expérimenté Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Points : 1 639
    Points
    1 639
    Par défaut
    J'utilise criteria avec une date et ca ne me pose pas ce probleme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd");
    		Date fechaSGI = sdf.parse(pgvalor1);
    		List listLogs=dao.getHibernateSession().createCriteria(Log.class)
    			.add(Restrictions.ge("lgdataaccio",fechaSGI)).list();
    Ca vient peut etre de ton parsing.

    Tu peut montrer un peu plus de code ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2007
    Messages : 71
    Points : 62
    Points
    62
    Par défaut
    En fait, ce que proposait fr1man marche bien je n'ai plus de problème. L'exemple que j'ai pour test répond bien, mais maintenant j'ai un peu peur au niveau des heures, étant donné que je ne peux manipuler que des dates dans le code, et que la base de données contient également l'heure.

    donc j'ai fait comme test que date1 > monChamp et (date1+1jour) < monChamp, mais il suffit que date1 contiennent une heure (au hasard 23:59:59) pour que mon test ne fonctionne plus correctement... Si la valeur de monChamp est à 12h00, il ne sera pas sélectionné...

    d'où mon inquiétude...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de date dans requête de màj imbriquée
    Par VirginieGE dans le forum Langage SQL
    Réponses: 11
    Dernier message: 20/07/2004, 15h34
  2. problème de date
    Par baboune dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 10/06/2004, 10h52
  3. Problème de date dans MONTHS_BETWEEN
    Par ghostlord79 dans le forum Oracle
    Réponses: 10
    Dernier message: 07/04/2004, 11h21
  4. Problème conversion date
    Par mat.M dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/03/2004, 15h05
  5. Encore un probléme de date avec TADO !
    Par bNoureddine dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/02/2004, 18h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo