2016-04-26 1 views
0

J'essaie d'utiliser UNION pour collecter tous les identifiants uniques (jcr: uuid) de plusieurs types de nœuds et obtenir une exception InvalidQueryException, alors que les instructions SELECT elles-mêmes sont réussies.
version Jackrabbit: 2.12.1JCR-SQL2 InvalidQueryException utilisant UNION - attendu: <end>

SELECT [jcr:uuid] FROM [base:nodeType1] 
UNION 
SELECT [jcr:uuid] FROM [base:nodeType2] 

StackTrace:

SELECT [jcr:uuid] FROM [base:nodeType1] 
UNION(*)SELECT [jcr:uuid] FROM [base:nodeType2]; expected: <end> 
at org.apache.jackrabbit.rmi.server.ServerObject.getRepositoryException(ServerObject.java:113) 
    at org.apache.jackrabbit.rmi.server.ServerQueryManager.createQuery(ServerQueryManager.java:74) 
    at sun.reflect.GeneratedMethodAccessor2078.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:323) 
    at sun.rmi.transport.Transport$1.run(Transport.java:200) 
    at sun.rmi.transport.Transport$1.run(Transport.java:197) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.rmi.transport.Transport.serviceCall(Transport.java:196) 
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at java.lang.Thread.run(Thread.java:745) 
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:276) 
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:253) 
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:162) 
at org.apache.jackrabbit.rmi.server.ServerQueryManager_Stub.createQuery(Unknown Source) 
at org.apache.jackrabbit.rmi.client.ClientQueryManager.createQuery(ClientQueryManager.java:66) 

Répondre

0

Votre requête contient plus d'un sélecteur, par conséquent, vous devez utiliser un nom de sélection dans votre requête. Le nom n'est optionnel que s'il y a exactement un sélecteur.

Essayez ceci:

SELECT [jcr:uuid] FROM [base:nodeType1] AS a 
UNION 
SELECT [jcr:uuid] FROM [base:nodeType2] AS a 
+0

Merci Oliver, mais la solution proposée ci-dessus ne fonctionne pas non plus.
J'ai essayé les requêtes ci-dessous et elles ne fonctionnent pas non plus.

'SELECT [jcr: uuid] à partir de [base: nodeType1] en tant que UNION SELECT [jcr: uuid] à partir de [base: nodeType2] AS

a'' sélectionner un. [Jcr: uuid] à partir de [base: nodeType1] en tant que UNION SELECT a [jcr:. uuid] à partir de [base: nodeType2] AS

a' 'sélectionner un [jcr:. uuid] à partir de [base:. nodeType1] en tant que UNION SELECT b [ jcr: uuid] FROM [base: nodeType2] AS b'

user3150236