AYUDA !!!!! Con Hibernate HQL

#1
Hola a toda la comunidad Bakuna, bueno estoy desarrollando un proyectillo en Struts2, hibernate (JPA/HQL), Spring sessionFactory, me he encontrado con un problema a tratar de hacer una consulta a una columna Geometry de la DB Spatial, utilizo el AsText(calumna), y lo trate de hacer en un query que integro en un metodo de java con createQuery(); , en fin no me ha dado resultado y bueno, quisiera ke alguien me pudiera ayudar o darme ideas de como hacerlo:

Desde la consola del gestor de BD PGAdmin III con postgis, lance este query y todo perfecto, asi es como quiero ke se despliegue:




pero ya en el proyecto utilizo este query:



aunque sin exito me arroja el siguiente error, por favor alguien ke me pudiera decir que hacer, se lo agradeseria:

 
#4
Mmmm creo que el problema esta en la consulta, no he usada las herramientad que comentas pero en SQL el like se trata como cadena y en tu consulta omites las comillas simples u apostrofes, es decir eg: select * from cosas where nombre LIKE '%nombre_cosa%'

Por lo que en tu linea se setstring solo colocas la variable nombre dentro de porcentajes, agrega las comillas y repite.

saludos
 
#5
hola raiden_bak, grax fijate ke el problema es con el AsText, porke si utilizo el query sin el AsText, me cunsulta bien los campos, pero en especial el TheGeom me lo de codificado por el postgis, y el astext es para decodificarlo, saludos y grax por comentar
 

matrixasiel

Bovino maduro
#6
disculpa la molestia pero podrias comentarnos acerca de los programas que estas utilizando como descripcion de cada uno, por favor.

nota: sino me equivoco estas en plataforma de linux(ubuntu) espero no equivocarme jejeje.
 
#7
Que tal Alberto, creo que uno de los problemas que te podria estar dando es que en hql haces referencia al objeto en si, que en tu caso seria PrediosJoinDTO, y al hacer referencia al campo c.theGeom tendria que estar "mapeado" a la propiedad de tipo Geometry la cual creo solo esta disponible en hibernate spatial (aca te dejo un link sobre hibernate spatial http://www.hibernatespatial.org/usage.html) de igual forma podrias pegar aca tu mapeo de hibernate (hbm.xml) para que veamos mas a detalle como ayudarte. Tambien podrias evaluar como guardar las dimensiones de lo que estabas guardando para simplificar un poco tu problema.

Espero haber ayudado
Saludos :vientos:
 
#8
Hola Ragnarok9116 te agradezco ke te tomaras la molestia de leer mi problema, si de echo no se mucho de hibernate-spatial pero mi mapeo lo tengo de esta forma, con spring sessionFactori y HibernateDialect:







y en la clase de datos DTO, declare el objeto theGeom como un String, pero al parecer tienes razon, nada mas ke no se como cambiar de hibernateDialect a espacial, y como lo mapeadia. aki te dejo el DTO:



 
#9
Lo que se me ocurre que puedes probar es lo siguiente:
Usar la clase ResultTransformer de hibernate para ejecutar un query con sentencia SQL. Eso se haria de la siguiente forma:

ResultTransformer rt = Transformers.aliasToBean(PrediosJoinDTO.class);
Query q = session.createSQLQuery("select id_edificio as id, nom_edificio as nombre, id_uso as tipoUso, area_construccion as areaConstruccion, id_usuario as usuario, asText(the_geom) as theGeom from edificio").setResultTransformer(rt);

Puedes probar asi, y me comentas si te funciono
 
#10
Hola Ragnarok9116 muchas grax por estar comentando, fijate ke si lo prove, pero me arrojo el siguiente error, no se ke este haciendo mal, te paso el query como lo hice:
javarvlet.ServletException: java.lang.IllegalArgumentException: Parameter nombre does not exist as a named parameter in [SELECT id_edificio as id, nom_edificio as nombre, id_uso as tipoUso, area_construccion as areaConstruccion, id_usuario as usuario, AsText(the_geom) as theGeom FROM edificio]
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419)
org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:99)


 

magomaitin

Bovino maduro
#11
suponiendo que nombre es una variable:

"SELECT pre.id as id, pre.nombre as nombre, pre.tipoUso as tipoUso, pre.areaConstruccion as areaConstruccion, pre.theGeom as AsTex, pre.usuario as usuario From PrediosJoinDTO as pre WHERE pre.nombre like"+nombre+";"

amigo HQL no es SQL ni funciona igual lee la documentacion y veras que tu error es de sintaxis

trabaje mucho tiempo con HQL y creeme tal vez sea mas larga la forma de hacer las consultas con campos en especifico y con joins pero es mas rapida su ejecucion, mira si seleccionas individual ponle as "lo que quieras" y ya veras que si charcha
 
#12
hola magomaitin grax por comentar, fijate ke si lo estoy utilizando en alias en mi caso uso (c.id..... form PredioJoinDTO as c), hasta arriba en la imagen viene, mi problema no es tanto del HQL y se bien ke no es = a SQL, el problema aki es el "AsText", el cual es el que descodifica ese campo de la base de datos, y hibernate solo no lo soporta, ando viendo con el hibernatespatial, a ver ke onda, de todas formas te agradesco el comentario. Saludos....
 
#13
Ese error te lo lanzo debido a que no cuentas con el parametro dentro de tu query, intenta no ejecutar la linea:
query.setString("nombre","%"+filter.getNombre()+"%");
Solo para probar si en realidad funciona de esa manera, si te funciona pues ya solo es de que coloques el parametro en el query.
Saludos
 
#15
Hola que tal Alberto, mmm si eso es por que en tu PredioJoinDTO no tienes los setters de las propiedades, por cada propiedad debes de tener sus metodos de acceso, por ejemplo:
para la propiedad _nombre, debes tener un metodo setNombre()
public void setNombre(String newVal){
this._nombre=newVal;​
}
y otro metodo getNombre()
public void getNombre(){
return this._nombre;​
}
y para la propiedad que tambien es un dto (de tipo TiposPrediosDTO), temporalmente para esta prueba puedes ponerle de tipo Integer y quitarle la anotacion de Join

Saludos
 
#16
Hola Ragnarok9116 , No, si los tengo de echo los puse mas arriba en las imagenes ke postie, como esta creado mi PrediosJoinDTO, ahi vienen los metodos GET's y SET's, pero te lo vuelvo a poner aki pa ke lo veas, y muchas grax ke sigues mi caso muy de serca, jiijijijjiji , saludos...

 

fierros_X

Bovino maduro
#17
Tambien me paso a mi con postgis, algunos querys son muy complicados o no reconoce el "dialecto"

Esa ocasion sali del paso con un procedimiento almacenado, el tuyo hazlo para que recupere las coordenadas como texto que es lo que deseas, y el procedimiento lo puedes llamar desde hibernate.

Porque si te da problemas con eso imagínate al sumar, unir o modificar los shapes, estará de locos, no?
 
#18
ok, grax por tu comentario fierros_X, entonces eso ke dices como lo haria en hibernate, porke segun yo lei, ke hibernate no soporta datos espaciales como el AsText, pero SpatialHibernate si aunke configurarlo es un super cuete, y tendria ke cambiar muchas pero muchas cosas, y si lo hago otras ya no jalan, pero si me pudieras ayudar te lo agradeseria, saludos....
 
#19
ok, grax por tu comentario fierros_X, entonces eso ke dices como lo haria en hibernate, porke segun yo lei, ke hibernate no soporta datos espaciales como el AsText, pero SpatialHibernate si aunke configurarlo es un super cuete, y tendria ke cambiar muchas pero muchas cosas, y si lo hago otras ya no jalan, pero si me pudieras ayudar te lo agradeseria, saludos....
 

fierros_X

Bovino maduro
#20
El codigo no lo tengo porque lo trabajamos en sus maquinas lo que si te puedo indicar es el tuto que me agarre para usar los procedimientos almacenados con hibernate.

Es este
 
Arriba