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 :

Requête sur le mois ou l'année d'une date


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Par défaut Requête sur le mois ou l'année d'une date
    Bonjour,

    J'aimerais faire une requête qui permet de filtrer mes enregs selon l'année et le mois d'une date.
    Pour cela j'ai fait la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @NamedQuery(name = "JourFerme.getJourFermeListeForSocieteAndYearMonth", 
    		query = "SELECT jour FROM JourFerme jour WHERE jour.lieu = :lieu AND EXTRACT(YEAR, jour.date) = :annee AND EXTRACT(MONTH, jour.date) = :mois ORDER BY jour.date")
    Mais lors du déploiement sur mon serveur glassfish, j'ai l'erreur suivante :

    cannot Deploy test_erp
    deploy is failing=Error occurred during deployment: Exception while deploying the app [test_erp] : Exception [EclipseLink-28019] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.EntityManagerSetupException
    Exception Description: Deployment of PersistenceUnit [test_erp_PU] failed. Close all factories for this PersistenceUnit.
    Internal Exception: Exception [EclipseLink-0] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.JPQLException
    Exception Description: Syntax error parsing [SELECT jour FROM JourFerme jour WHERE jour.lieu = :lieu AND EXTRACT(YEAR, jour.date) = :annee AND EXTRACT(MONTH, jour.date) = :mois ORDER BY jour.date].
    [60, 72] The right expression is not a valid expression.
    [74, 150] The query contains a malformed ending.. Please see server.log for more details.
    NB : J'utilise eclipseLink 2.5

    Merci pour votre aide

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    En SQL standard, il faudrait utiliser YEAR(leChampDate) et MONTH(leChampDate)
    EXTRACT est une fonction propre à MySQL et PostgreSQL... Tu as quoi comme base de données ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Par défaut
    C'est une SQL Serveur.
    J'ai vu qu'avec eclipselink il fallait utiliser extract() et pas seulement year() ou month()

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    décomposer la date en base pour en extraire le mois et l'année n'est pas très perfrmant, ça ne facilie pas le travail du sgbd pour utiliser les index. Vu que tu veux tout ce qui se trouve dans un mois donné, cela veux dire que tu veux tout ce qui se trouve entre le début et la fin du mois. Refait ta requête dans ce sens, elle sera plus performante, plus facile à écrire, plus souple et indépendante du SGBD.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    @NamedQuery(name = "JourFerme.getJourFermeListeForSocieteInRange", 
    		query = "SELECT jour FROM JourFerme jour WHERE jour.lieu = :lieu AND jour.date >= :minDate and jour.date <= :maxDate ORDER BY jour.date")

  5. #5
    Membre éclairé
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Par défaut
    J'hésitais entre faire une extraction et mettre une date de début et de fin.
    Du coup je vais partir sur la date de début et de fin.

    Merci les gars pour votre aide

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Attention avec la solution de tchize_, si tu as un horodatage, il faudra positionner la partie heure/minute/seconde/milliseconde à 0 pour le début et à 23, 59, 59, 999 pour la fin...
    Personnellement, je choisirais YEAR et MONTH...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Comment extraire le mois et l'année d'une date?
    Par hazem2410 dans le forum Oracle
    Réponses: 2
    Dernier message: 10/12/2010, 17h03
  2. Réponses: 1
    Dernier message: 19/08/2008, 21h13
  3. Extraire le mois et l'année d'une date
    Par kosni dans le forum Cognos
    Réponses: 3
    Dernier message: 23/05/2008, 15h10
  4. [SQL Server] extraire le mois et l'année d'une date
    Par calison3 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/03/2006, 12h16
  5. Récupérer le mois et l'année d'une date
    Par missllyss dans le forum SQL
    Réponses: 2
    Dernier message: 23/09/2003, 09h17

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