Fonction select ne fonctionne pas

mozhar -  
 mozhar -
voila ma requete qui me donne le message suivant"

Caused by: java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager:
Exception Description: Syntax error parsing the query [SELECT c FROM Compte WHERE c.debut <= :mois AND c.fin = :mois ], line 1, column 21: syntax error at [WHERE].
Internal Exception: UnwantedTokenException(found=WHERE, expected 80)



la fonction est

public List<Compte> getComptesSansSolde(Date date) {
return em.createQuery("SELECT c "
+ "FROM Compte "
+ "WHERE c.debut <= :mois "
+ "AND c.fin >= :mois "
+ "AND ( NOT c IN " //il faut voir si not c in or c not in
+ "(SELECT b.compte \n "
+ "FROM Solde b \n "
+ "WHERE b.mois = :mois)) ")
.setParameter("mois", date)
.getResultList();
}

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Il ne sait pas ce qu'est "c" il faut que tu lui précise en faisant "FROM Compte c"
0
mozhar
 
mais le pblm cfec avec la conditionwhere dans le message du serveur
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Il t'indique une erreur sur le WHERE parce qu'il n'a rien à faire là (UnwantedTokenException) vu que l'on attend d'abord une déclaration d'objet pour la classe Compte. Donc en mettant d'abord un c puis le WHERE cette erreur devrait être réglée.
0
mozhar
 
mais c'est toujour la meme chose il me dit" Exception: NoViableAltException (80@[()* loopback of 477:9: (node =join)*])
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Ce n'est pas la même chose vu que l'exception est différente !
Il y a plusieurs erreurs dans ta requête et il faut toutes les corriger les unes après les autres.

Là en l'occurrence je pense que c'est les \n qu'il n'aime pas.
Et pour répondre à ton commentaire, ce sera NOT IN, sauf que ça ne pourra pas s'appliquer à "c" tout entier, mais uniquement à un champ de "c", peut-être "c.id" ou quelque chose comme ça.

De plus j'ai de gros doutes sur ton SELECT FROM Solde, je ne vois pas pourquoi tu aurais une table Solde, pour moi ce serai un attribut de Compte.

Si tu n'arrives pas à t'en sortir donnes le détail de tes classes Compte, Solde, et des relations (OneToMany, etc) que tu as entre ces deux classes.
0
mozhar
 
ok
ma classe Compte :
1 - debut (date)
2 - fin(date)
ma classe Solde:
1 -solde(BigDecimal)
2 - @JoinColumn(name = "compte", referencedColumnName = "ref")
@ManyToOne
private Compte compte;
3-mois(date)

ma question faire la requete qui ma donne une liste de comptes qu'ils n'ont pas des soldes saisies pendant une date d (mois) sachant que la date d doit etre apres le la date (debut) et avant la date (fin) merci pour votre aide
0