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

JPA Java Discussion :

comment je peux comparer 2 dates en JPQL


Sujet :

JPA Java

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 139
    Par défaut comment je peux comparer 2 dates en JPQL
    salut,
    comment je peux comparer 2 dates en JPQL,normalement ça marche si j'utilise de simple opérateurs tq =,<,>, puisque je manipule des objets ,
    mais je ne sais pas pourquoi ça ne marche pas , j'ai pensé à "to_char" , en fait je veux selectionner les dates par mois ect..
    je me suis bloquée , le machin 'CURRENT_DATE' n'a pas aussi fonctionné
    I m waiting for your ideas,
    merci

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 968
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 968
    Par défaut
    Citation Envoyé par chflb Voir le message
    salut,
    comment je peux comparer 2 dates en JPQL,normalement ça marche si j'utilise de simple opérateurs tq =,<,>, puisque je manipule des objets ,
    mais je ne sais pas pourquoi ça ne marche pas , j'ai pensé à "to_char" , en fait je veux selectionner les dates par mois ect..
    je me suis bloquée , le machin 'CURRENT_DATE' n'a pas aussi fonctionné
    I m waiting for your ideas,
    merci
    getSingleResult sur
    "SELECT CURRENT_TIMESTAMP FROM ENTITY_OF_YOURS"
    "SELECT CURRENT_TIMESTAMP FROM ENTITY_OF_YOURS"
    "SELECT count(*) FROM TIMESTAMPED_ENTITY u WHERE u.updated > :date",

    me sort correctement

    2008-08-14 11:32:17.444136
    2008-08-14 11:32:17.444136
    0

    par contre la syntaxe
    "SELECT (:d2 > :d1) as test FROM ENTITY_OF_YOURS"
    qui est acceptable en SQL ne fonctionnera pas :
    11:35:25,505 ERROR PARSER:33 - <AST>:1:13: unexpected AST node: >

    et sans le FROM
    11:39:58,615 ERROR PARSER:33 - <AST>:0:0: unexpected end of subtree

    et aussi si vous utilisez Hibernate, appliquer le patch :
    http://opensource.atlassian.com/proj...browse/EJB-375

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 139
    Par défaut
    getSingleResult sur
    "SELECT CURRENT_TIMESTAMP FROM ENTITY_OF_YOURS"
    "SELECT CURRENT_TIMESTAMP FROM ENTITY_OF_YOURS"
    "SELECT count(*) FROM TIMESTAMPED_ENTITY u WHERE u.updated >
    bonjour,
    merci pour ta réponse, mais qu'est ce que tu as voulu dire par "ENTITY_OF_YOURS", mon entité? par exemple :
    "SELECT CURRENT_TIMESTAMP FROM Operation" ?
    et aussi si vous utilisez Hibernate, appliquer le patch :
    http://opensource.atlassian.com/proj...browse/EJB-375
    moi j'utilise toplink,
    en fait,j'ai de plein problèmes avec les dates en java, JPA lui est très pauvre en fonctions de dates,,
    voilà ma situation:
    -pour introduire des dates avec le hh:mi:ss, au niveau d'oracle, j'ai changé le type de l'atribut date_op vers timestamp,
    -au niveau de mon entité en java,le type de mon dateOp c'est java.util.date(normalement ça prend en considération le hh:mi:ss)mais lorsque j'insère dans ma base depuis java (operation.setDateOp(new Date()) ),le hh:mi:ss s'enregistre toujours 12:00:00

    - j'ai ensuite voulu changer le type de dateOp de java.util.Date à java.sql.Timestamp ,mais mon application ne s'est pas même lancée correctement (etat http 503)

    -de même, pour les requêtes JPQL,la selection d'un champ tq dateOp=max(dateOp) m'affiche plus qu'un resultat (càd elle ne prend pas en considèration la différence entre les dates par heure et minutes ..

    j'ai besoin de vos aides,j'ai passé 2 jours en ça sans rien faire..
    merci

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 968
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 968
    Par défaut
    Citation Envoyé par chflb Voir le message
    bonjour,
    merci pour ta réponse, mais qu'est ce que tu as voulu dire par "ENTITY_OF_YOURS", mon entité? par exemple :
    "SELECT CURRENT_TIMESTAMP FROM Operation" ?

    moi j'utilise toplink,
    en fait,j'ai de plein problèmes avec les dates en java, JPA lui est très pauvre en fonctions de dates,,
    voilà ma situation:
    -pour introduire des dates avec le hh:mi:ss, au niveau d'oracle, j'ai changé le type de l'atribut date_op vers timestamp,
    -au niveau de mon entité en java,le type de mon dateOp c'est java.util.date(normalement ça prend en considération le hh:mi:ss)mais lorsque j'insère dans ma base depuis java (operation.setDateOp(new Date()) ),le hh:mi:ss s'enregistre toujours 12:00:00

    - j'ai ensuite voulu changer le type de dateOp de java.util.Date à java.sql.Timestamp ,mais mon application ne s'est pas même lancée correctement (etat http 503)

    -de même, pour les requêtes JPQL,la selection d'un champ tq dateOp=max(dateOp) m'affiche plus qu'un resultat (càd elle ne prend pas en considèration la différence entre les dates par heure et minutes ..

    j'ai besoin de vos aides,j'ai passé 2 jours en ça sans rien faire..
    merci
    … code de votre Entity… ?
    (partie déclaration des attributs…)

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 139
    Par défaut
    bonjour,
    voilà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    @Entity
    @Table(name = "OPERATION")
    @NamedQueries({@NamedQuery(name = "Operation.findByOp", query = "SELECT o FROM Operation o WHERE o.op = :op"), @NamedQuery(name = "Operation.findByNpch", query = "SELECT o FROM Operation o WHERE o.npch = :npch"), @NamedQuery(name = "Operation.findByMontant", query = "SELECT o FROM Operation o WHERE o.montant = :montant"), @NamedQuery(name = "Operation.findByNumMandat", query = "SELECT o FROM Operation o WHERE o.numMandat = :numMandat"), @NamedQuery(name = "Operation.findByMatriculeAgent", query = "SELECT o FROM Operation o WHERE o.matriculeAgent = :matriculeAgent"), @NamedQuery(name = "Operation.findByImpBudi", query = "SELECT o FROM Operation o WHERE o.impBudi = :impBudi"), @NamedQuery(name = "Operation.findByImpAnal", query = "SELECT o FROM Operation o WHERE o.impAnal = :impAnal"), @NamedQuery(name = "Operation.findByCodActiv", query = "SELECT o FROM Operation o WHERE o.codActiv = :codActiv"), @NamedQuery(name = "Operation.findByMontantht", query = "SELECT o FROM Operation o WHERE o.montantht = :montantht"), @NamedQuery(name = "Operation.findByDateVersm", query = "SELECT o FROM Operation o WHERE o.dateVersm = :dateVersm"), @NamedQuery(name = "Operation.findByDateOp", query = "SELECT o FROM Operation o WHERE o.dateOp = :dateOp"), @NamedQuery(name = "Operation.findByMoisPaie", query = "SELECT o FROM Operation o WHERE o.moisPaie = :moisPaie")})
    public class Operation implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @Column(name = "OP", nullable = false)
        private Long op;
        @Column(name = "NPCH")
        private Long npch;
        @Column(name = "MONTANT", nullable = false)
        private BigInteger montant;
        @Column(name = "NUM_MANDAT")
        private Long numMandat;
        @Column(name = "MATRICULE_AGENT")
        private Long matriculeAgent;
        @Column(name = "IMP_BUDI")
        private Long impBudi;
        @Column(name = "IMP_ANAL")
        private Long impAnal;
        @Column(name = "COD_ACTIV")
        private Long codActiv;
        @Column(name = "MONTANTHT")
        private BigInteger montantht;
        @Column(name = "DATE_VERSM", nullable = false)
        @Temporal(TemporalType.DATE)
        private Date dateVersm;
        @Column(name = "DATE_OP", nullable = false)
        @Temporal(TemporalType.TIMESTAMP)
        private Date dateOp;
        @Column(name = "MOIS_PAIE", nullable = false)
        @Temporal(TemporalType.DATE)
        private Date moisPaie;
        @JoinColumn(name = "COD_CAISSE", referencedColumnName = "CODE_CAISSE")
        @ManyToOne
        private Caisse codCaisse;
        @JoinColumn(name = "COD_TRANSAC", referencedColumnName = "CODE")
        @ManyToOne
        private Transaction codTransac;

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 968
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 968
    Par défaut
    Citation Envoyé par chflb Voir le message
    rien d'anormal à première vue…

    quel type de colonne a-t-il généré côté ORACLE ?

  7. #7
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 139
    Par défaut
    salut,
    je veux dire tout d'abord que j'utilise oracle express 10g,
    quel type de colonne a-t-il généré côté ORACLE ?
    en fait, j'ai créé ma base via oracle, et c'est l'entity class qui est générée par netbeans,
    coté oracle, pour le type de l'attribut date_op je l'ai mis à timestamp (car je veux avoir le hh:mi:ss,) pour les autres dates sont de type DATE,
    j'espère que tu pourras m'aider,
    merci

  8. #8
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 968
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 968
    Par défaut
    Citation Envoyé par chflb Voir le message
    salut,
    je veux dire tout d'abord que j'utilise oracle express 10g,

    en fait, j'ai créé ma base via oracle, et c'est l'entity class qui est générée par netbeans,
    coté oracle, pour le type de l'attribut date_op je l'ai mis à timestamp (car je veux avoir le hh:mi:ss,) pour les autres dates sont de type DATE,
    j'espère que tu pourras m'aider,
    merci
    est-ce que au niveau de l'ORM le dialecte sélectionné est correct ?

    par exemple avec Hibernate :

    <property name="hibernate.dialect"
    value="org.hibernate.dialect.Oracle10gDialect"/>

    dans persistence.xml…

Discussions similaires

  1. [Dates] Comment comparer 2 dates en PHP ?
    Par tigzirt dans le forum Langage
    Réponses: 8
    Dernier message: 10/08/2010, 16h03
  2. Comment vérifier et comparer une date?
    Par denis907 dans le forum ASP
    Réponses: 5
    Dernier message: 31/07/2007, 23h06
  3. Comment comparé une date dans une requête?
    Par ghan77 dans le forum Bases de données
    Réponses: 3
    Dernier message: 29/04/2006, 10h22
  4. Comment comparer deux dates
    Par vodevil dans le forum Modules
    Réponses: 6
    Dernier message: 01/09/2005, 18h24
  5. comment comparer deux dates?
    Par billoum dans le forum C++Builder
    Réponses: 2
    Dernier message: 21/08/2004, 21h08

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