Foros del Web » Programación para mayores de 30 ;) » Java »

Conversion de consulta SQL a EJBQL

Estas en el tema de Conversion de consulta SQL a EJBQL en el foro de Java en Foros del Web. Hola a todos tengo una duda es que estoy desarrollando una aplicacion con EJB y necesito hacer querys como me lo provee el lenguaje, ye ...
  #1 (permalink)  
Antiguo 28/11/2012, 09:35
 
Fecha de Ingreso: octubre-2009
Mensajes: 29
Antigüedad: 14 años, 6 meses
Puntos: 0
Conversion de consulta SQL a EJBQL

Hola a todos tengo una duda es que estoy desarrollando una aplicacion con EJB y necesito hacer querys como me lo provee el lenguaje, ye tengo las consultas en SQL pero no he podido pasarlas a EJBQL:


Ejemplo tengo la siguiente consulta en SQL:

Código:
select titulo_Original from videos, categoria where videos.vid_Isan=categoria.videos_vid_Isan and categoria.nombre not like 'Drama' and videos.ano_Produccion between '2001-01-01' and '2012-05-08'
Es una consulta donde enlazo dos llaves primarias vid_Isan(pertenece a la tabla videos) y videos_vid_Isan(es la llave foranea de videos en la tabla categoria) y luego busco el nombre de una categoria en este caso 'Drama' y luego busco que el año de produccion este dentro de un rango de fechas

Entonces mi pregunta es como hago para convertir esa sql en EJBQL ya que tengo las tablas de la base de datos mapeadas correctamente lo he estado intentando de la siguiente forma pero me sale una excepcion ya que el query no esta bien escrito

Código:
query = em.createQuery("SELECT OBJECT(v,c) FROM Videos v, Categoria c WHERE v.vidIsan = c.videosvidIsan AND c.nombre NOT LIKE = ?1");
 query.setParameter(1, categoria);
Código:
//o asi tambien lo he intentado
query = em.createQuery("SELECT v,c FROM Videos v, Categoria c WHERE v.vidIsan = :c.videosvidIsan AND c.nombre NOT LIKE ?1";
 query.setParameter(1, categoria);
si me pueden ayudar se los agradeceria

saludos
  #2 (permalink)  
Antiguo 28/11/2012, 09:56
Avatar de hschimpf  
Fecha de Ingreso: junio-2009
Ubicación: in the World Wide Web
Mensajes: 140
Antigüedad: 14 años, 10 meses
Puntos: 17
Respuesta: Conversion de consulta SQL a EJBQL

Hola amerkmif, no conozco del lenguaje EJBQL, pero nos facilitaria si posteas el mensaje de error que te devuelve al ejecutar la consulta, entonces comparar el mensaje con tu consulta.

Suerte!
__________________
Hermann D. Schimpf
Visita mis repositorios de:
Clases Java: http://code.google.com/p/javaclassesrepository/
Clases PHP: http://code.google.com/p/phpclassesrepository/
  #3 (permalink)  
Antiguo 28/11/2012, 10:10
 
Fecha de Ingreso: octubre-2009
Mensajes: 29
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Conversion de consulta SQL a EJBQL

Hola gracias por la respuesta

el lenguje EJBQL es el que provee EJB para hacer querys del tipo de objetos algo asi como HPQL , va mas por el lenjuage que provee JPA para las consultas

aqui hay un ejemplo de ese lenguaje

http://fishandchipsandbits.blogspot.com/2012/02/java-informes-con-ireport-y-ejbql.html

el error que me arroja es el siguiente:

Código:
javax.ejb.EJBException

Caused by: Exception [EclipseLink-8025] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Syntax error parsing the query [SELECT v,c FROM Videos v, Categoria c WHERE v.vidIsan = :c.videosvidIsan AND c.nombre NOT LIKE ?1], line 1, column 58: unexpected token [.].
Internal Exception: NoViableAltException(85@[()* loopback of 822:9: (m= MULTIPLY right= arithmeticFactor | d= DIVIDE right= arithmeticFactor )*])
	at org.eclipse.persistence.exceptions.JPQLException.unexpectedToken(JPQLException.java:372)
	at org.eclipse.persistence.internal.jpa.parsing.jpql.JPQLParser.handleRecognitionException(JPQLParser.java:320)
	at org.eclipse.persistence.internal.jpa.parsing.jpql.JPQLParser.addError(JPQLParser.java:246)
	at org.eclipse.persistence.internal.jpa.parsing.jpql.JPQLParser.reportError(JPQLParser.java:363)
	at org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.JPQLParser.arithmeticTerm(JPQLParser.java:4600)
	at org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.JPQLParser.simpleArithmeticExpression(JPQLParser.java:4462)
	at org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.JPQLParser.arithmeticExpression(JPQLParser.java:4402)
	at org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.JPQLParser.comparisonExpressionRightOperand(JPQLParser.java:4332)
	at org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.JPQLParser.comparisonExpression(JPQLParser.java:4215)
	at org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.JPQLParser.simpleConditionalExpressionRemainder(JPQLParser.java:3389)
	at org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.JPQLParser.simpleConditionalExpression(JPQLParser.java:3326)
	at org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.JPQLParser.conditionalPrimary(JPQLParser.java:3275)
	at org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.JPQLParser.conditionalFactor(JPQLParser.java:3194)
	at org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.JPQLParser.conditionalTerm(JPQLParser.java:3103)
	at org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.JPQLParser.conditionalExpression(JPQLParser.java:3029)
	at org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.JPQLParser.whereClause(JPQLParser.java:2986)
	at org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.JPQLParser.selectStatement(JPQLParser.java:380)
	at org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.JPQLParser.document(JPQLParser.java:281)
	at org.eclipse.persistence.internal.jpa.parsing.jpql.JPQLParser.parse(JPQLParser.java:134)
	at org.eclipse.persistence.internal.jpa.parsing.jpql.JPQLParser.buildParseTree(JPQLParser.java:95)
	at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:215)
	at org.eclipse.persistence.internal.jpa.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:190)
	at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:142)
	at org.eclipse.persistence.internal.jpa.EJBQueryImpl.<init>(EJBQueryImpl.java:126)
	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1475)
	... 72 more
Caused by: NoViableAltException(85@[()* loopback of 822:9: (m= MULTIPLY right= arithmeticFactor | d= DIVIDE right= arithmeticFactor )*])
	at org.eclipse.persistence.internal.libraries.antlr.runtime.DFA.noViableAlt(DFA.java:159)
	at org.eclipse.persistence.internal.libraries.antlr.runtime.DFA.predict(DFA.java:116)
	at org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.JPQLParser.arithmeticTerm(JPQLParser.java:4557)
	... 92 more
  #4 (permalink)  
Antiguo 28/11/2012, 10:18
Avatar de hschimpf  
Fecha de Ingreso: junio-2009
Ubicación: in the World Wide Web
Mensajes: 140
Antigüedad: 14 años, 10 meses
Puntos: 17
Respuesta: Conversion de consulta SQL a EJBQL

Cita:
Iniciado por amerkmif Ver Mensaje
Código:
javax.ejb.EJBException

Caused by: Exception [EclipseLink-8025] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Syntax error parsing the query [SELECT v,c FROM Videos v, Categoria c WHERE v.vidIsan = :c.videosvidIsan AND c.nombre NOT LIKE ?1], line 1, column 58: unexpected token [.].
Internal Exception: NoViableAltException(85@[()* loopback of 822:9: (m= MULTIPLY right= arithmeticFactor | d= DIVIDE right= arithmeticFactor )*])
...
Segun dice el error, en la columna 58 esta el problema, y revisando tu consulta, estas utilizando el : (dos puntos) en la comparacion. Y segun lei sobre el lenguaje, el dos puntos es para referenciar una variable o parametro si no me equivoco, y alli estas referenciando la columna en una tabla.
No conosco el lenguaje, corregime si me equivoco pero de lo poco que lei ahora encontre ese detalle.

Suerte!
__________________
Hermann D. Schimpf
Visita mis repositorios de:
Clases Java: http://code.google.com/p/javaclassesrepository/
Clases PHP: http://code.google.com/p/phpclassesrepository/

Etiquetas: conversion, sql, aplicaciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:20.