2010-12-12 30 views
2

j'ai du mal avec certains mois seulement ou année JPAComment sélectionner mois seulement dans JPA

dans mysql j'écris suivi de l'instruction:

select * from table where Month(date) = 12 ; 

et bean entité i écrire suit:

select t from table t where Month(t.date) = 12; 

mais il lance erreur !!

PS: désolé je ne peux pas joindre mon stacktrace parce que je ne suis pas à la maison: D

Répondre

1

désolé, mais vous ne pouvez pas faire cela avec JPA pour autant que je sache. Le hql d'hibernate sur l'autre sait des choses comme month() hour() et minute().

vérifier cette question: JPA Date Arithmetic?

espoir qui a aidé

+0

merci pour votre soutien – MYE

0

pas partie de JPA, et par conséquent dans le rôle des extensions des fournisseurs. La plupart des implémentations JPA le supportent ... et vous ne dites pas lequel vous utilisez. DataNucleus prend certainement en charge MONTH, YEAR, DAY, HEURE, MINUTE, SECOND.

0

Cela pourrait aider quelqu'un.

Peu d'implémentations JPA ont un support intégré pour les fonctions date/heure.

EclipseLink

EclipseLink supporte EXTRACT permettant une base de données pris en charge la date/heure de valeur partie à extraire de la date/heure. La fonction EXTRACT est indépendante de la base de données , mais nécessite un support de base de données. EXTRACT (AN, model.currencyExchangeDate), mais il faut EclipseLink 2.4.x

FUNC permet une fonction de base de données à appeler à partir JPQL. Il permet d'appeler toutes les fonctions de base de données non supportées directement dans JPQL. Pour appeler la fonction DB MyFunc (a, b, c), utilisez FUNC ('MyFunc', a, b, c).

Vous pouvez essayer FUNC ('YEAR', currencyExchangeDate) pour appeler la fonction 'YEAR' .

Mise en veille prolongée

En HQL, vous pouvez avoir la date fonction AN (date), le mois (date), JOUR (date) pour extraire les détails nécessaires. Les autres fonctions de temps prises en charge sont HEURE (date), MINUTE (date), SECOND (date).

API Critères

fonction CriteriaBuilder de #(): Créer une expression pour l'exécution d'une fonction de base de données.

CriteriaQuery<IptExchangeratelines> cq = cb.createQuery(IptExchangeratelines.class); 
Root<IptExchangeratelines> exRateLine = cq.from(IptExchangeratelines.class); 
cq.where(cb.equal(cb.function("year", Integer.class, 

exRateLine.get(exRateLine_.currencyExchangeDate)), year) 
.and(cb.equal(cb.function("month", Integer.class, 
exRateLine.get(exRateLine_.currencyExchangeDate)), month)));