2016-04-26 7 views
0

Я пытаюсь использовать UNION для сбора всех уникальных идентификаторов (jcr: uuid) нескольких типов узлов и получения исключения InvalidQueryException, в то время как сами инструкции SELECT сами являются успешными. версия
Jackrabbit: 2.12.1JCR-SQL2 InvalidQueryException с использованием UNION - ожидается: <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) 

ответ

0

Ваш запрос содержит более одного выбора, поэтому вы должны использовать имя селектора в запросе. Имя является необязательным, если имеется только один селектор.

Попробуйте это:

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

Спасибо Оливер, но выше Предлагаемое решение не работает.
Я пробовал следующие запросы, и они тоже не работают.

'SELECT [JCR: UUID] из [оснований: nodeType1] в качестве UNION SELECT [JCR: UUID] из [оснований: nodeType2] КАК A'

' ВЫБРАТЬ. [JCR: UUID] из [оснований: nodeType1] в качестве UNION вЫБРАТЬ [JCR: UUID.] с [основания: nodeType2] КАК A'

'Выберите [JCR:. UUID] из [базы:. nodeType1] в качестве UNION SELECT, б [ jcr: uuid] FROM [base: nodeType2] AS b'

user3150236