Bonjour a tous,
J'utilise actuellement les EJB 3.0 et je fait des requetes EJB-QL .
J'ai fait une requete bien precise qui correspond a une recherche bien specifique selon mes regles metier. la voici :
Malhreuseument , cette requete produit une erreur que je n'arrive pas a expliquer :
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 String numDossierTMP = "000264578"; StringBuffer sbRequete = new StringBuffer(256); sbRequete.append("SELECT f "); sbRequete.append("FROM "); sbRequete.append(FraisDiversEntity.class.getSimpleName()); sbRequete.append(" f WHERE "); sbRequete.append(" UPPER(f.fraisDiversPK.numeroHospitalisation) LIKE UPPER ("); sbRequete.append(" :numDossierTMP "); sbRequete.append(") AND ( (f.nomenclature IS NULL) OR (f.nomenclature NOT IN ('D', 'L', 'R', 'M', 'O', 'S', 'T' )) ) "); sbRequete.append(" AND f.codeUCD IS NULL "); sbRequete.append(" AND f.codeDMI IS NULL "); sbRequete.append(" AND f.facturationDebiteur3 != 'A' "); sbRequete.append(" AND (f.typeAmbulance IS NULL OR f.typeAmbulance NOT IN ('E', 'S')) "); sbRequete.append(" AND NOT EXISTS ("); sbRequete.append("SELECT ld , f "); sbRequete.append(" FROM "); sbRequete.append(LettreCleDetailEntity.class.getSimpleName()); sbRequete.append(" ld , "); sbRequete.append(FraisDiversEntity.class.getSimpleName()); sbRequete.append(" f "); sbRequete.append(" ) "); Query query; query = getEntityManager().createQuery(sbRequete.toString()); query.setParameter("numDossierTMP", numDossierTMP); System.out.println(sbRequete.toString()); return query.getResultList();
J'ai bien verifié toutes mes parenthèses et je ne vois pas où est ce que ça peut clocher. Je me demande donc si vous pouviez la regarder et peut etre y trouver une erreur...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2Caused by: java.sql.SQLException: ORA-00907: missing right parenthesis
N'hesitez pas à me demander des details. En ce qui concerne les Entity elle sont correct , il n'y a aucun doute la dessus
Merci d'avance
[edit]
La requete une fois la chaine construite donne ça :
ça sera ptete mieu qu'avec les append ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 SELECT f FROM FraisDiversEntity f WHERE UPPER(f.fraisDiversPK.numeroHospitalisation) LIKE UPPER ( :numDossierTMP ) AND ( (f.nomenclature IS NULL) OR (f.nomenclature NOT IN ('D', 'L', 'R', 'M', 'O', 'S', 'T' )) ) AND f.codeUCD IS NULL AND f.codeDMI IS NULL AND f.facturationDebiteur3 != 'A' AND (f.typeAmbulance IS NULL OR f.typeAmbulance NOT IN ('E', 'S')) AND NOT EXISTS (SELECT ld , f FROM LettreCleDetailEntity ld , FraisDiversEntity f )
[re-edit]
Petite précison : la requete marche tant qu'il n'y a pas la partie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 AND NOT EXISTS (SELECT ld , f FROM LettreCleDetailEntity ld , FraisDiversEntity f )
Partager