2013-08-27 3 views
2

J'ai requête comme en follows.But quand il est exécuté, je reçois un message d'erreur jeton inattendu: saufsauf clause veille prolongée

select d from DimensionStone d inner join d.stockRegister s 
where d.stockRegister.stockRegisterId <=? and s.application.applicationId=? 
and d.isIssued='No' or (s.stockRegisterId <=? and d.isIssued='Yes' 
and d.issuedDate>(select max(updatedOn) from StockRegister st 
where st.stockRegisterId<? and st.application.applicationId=?)) 
except (select d1 from DimensionStone d1 inner join d1.stockRegister s1 
where s1.stockRegisterId <=? and s1.application.applicationId=? and 
d1.isIssued='No') 

Comment puis-je résoudre ce problem.I ont déjà assez recherché par google.But je ne peux pas trouver la réponse désirée.S'il vous plaît m'aider

+0

est 'except' un mot-clé HQL? –

+0

Je n'aime jamais écrire des requêtes HQL complexes. Et si j'écris aussi, j'essaie de valider si la requête SQL générée par Hibernate est équivalente à ce que je voulais faire –

Répondre

0

except n'est pas un mot clé HQL valide; si vous voulez utiliser la syntaxe SGBDR spécifique utiliser pour cartographier chaque ligne recordset Session.createSQLQuery(String sql) et un ResultTransformer pour objet DimensionStone

0

remplacer sauf existe pas:

select d from DimensionStone d inner join d.stockRegister s 
where d.stockRegister.stockRegisterId <=? and s.application.applicationId=? 
and d.isIssued='No' or (s.stockRegisterId <=? and d.isIssued='Yes' 
and d.issuedDate> 
    (select max(updatedOn) from StockRegister st 
    where st.stockRegisterId<? and st.application.applicationId=?)) 
and not exists 
    (select 'next' from DimensionStone d1 inner join d1.stockRegister s1 
    where s1.stockRegisterId <=? and s1.application.applicationId=? and 
    d1.isIssued='No') 
0

Le mot-clé SAUF semble ne pas être manipulé par HQL (MOINS), j'ai la même exception que vous.
J'atteint de reproduire le comportement d'une exception requête en utilisant le mot-clé: NOT IN (EXISTE PAS pourrait fonctionner aussi bien)
Exemple:

SELECT a FROM MyTable a WHERE a NOT IN (SELECT a FROM MyTable a, otherTable l WHERE l.id = ?1 AND l.myObject.id = a.id)