2015-08-28 4 views
0

Моя проблема заключается в том, что у меня есть запрос с EntityManager как:Java + Oracle + EntityManager

Query query = em.createQuery("select nombre from OTP_OPERACION_DETALLE"); 

и Java выдает это исключение:

error e: An exception occurred while creating a query in EntityManager: 
Exception Description: Syntax error parsing the query [select nombre from OTP_OPERACION_DETALLE], line 0, column -1: unexpected end of query. 
Internal Exception: MismatchedTokenException(-1!=80) 

Я стараюсь этом пробеге этот запрос в Oracle (PL/SQL), и у меня нет никаких проблем.

Где проблема?

+0

Можете ли вы попробовать 'em.createQuery (" select nombre from OTP_OPERACION_DETALLE nombre ");'? – Lucky

+0

У меня ошибка: error e: Исключение произошло при создании запроса в EntityManager: Исключение Описание: Ошибка компиляции запроса [select nombre from OTP_OPERACION_DETALLE nombre]. Неизвестный тип сущности [OTP_OPERACION_DETALLE]. – jorgeregidor

+0

Это потому, что вы, возможно, не добавили '@ Entity' и не упомянули класс в вашем persistence.xml. Добавьте примечание '@ Table' к вашему' @ Entity' и добавьте объект в 'persistence.xml'. Если это не объект, просто используйте 'em.createNativeQuery (« выберите nombre из OTP_OPERACION_DETALLE nombre »),' – Lucky

ответ

-1

Просто попробуйте эту войну

Query q=getEntityManager().createQuery("select nombre from OTP_OPERACION_DETALLE"); 
List roles=q.getResultList(); 
if (roles.isEmpty()) { 
    return null; 
} 
else { 
    //Fetch the Record 
} 
+0

У меня нет этой функции! – jorgeregidor

+0

'getEntityManager()' является заводским методом, а 'getResult()' поможет выполнить запрос. Вы говорите о том, какая функция? – SaviNuclear

1

Что у вас есть (или, скорее, не имеют) является JPQL запрос, он не будет работать в Oracle, так как только реализатор JPA может перевести его на SQL. И наоборот, то, что работает в Oracle, не может быть запущено с createQuery, для этого потребуется createNativeQuery.

Правильный запрос JPQL будет что-то вроде select a.nombre from MyEntity a где MyEntity является классом сущностей, который отображает до OTP_OPERACION_DETALLE таблицы (и имеет nombre поля).

0

Сначала вы отсутствовали nombre после OTP_OPERACION_DETALLE, который является псевдонимом для таблицы. И, как я уже упоминал в comments, вам нужно проверить, является ли класс, используемый в запросе, сущностью, и вы использовали аннотацию @Table в @Entity. В вашем случае OTP_OPERACION_DETALLE не является сущностью, так что вы должны использовать em.createNativeQuery

Query query = em.createNativeQuery("select a.nombre from OTP_OPERACION_DETALLE a"); 

который примерно равен по этому запросу select nombre from OTP_OPERACION_DETALLE.