2010-05-08 26 views
8

Tengo un problema con Hibernate Native Query. Tengo un SELECT que selecciona la porción de la matriz (base de datos PostgreSQL).Problema de Hibernate Native Query con los parámetros nombrados

El problema es que hibernate reconoce la siguiente parte: ": 300" de "SELECT my_array [1: 300] ..." como parámetro con nombre y obtengo la siguiente excepción: No se han establecido todos los parámetros nombrados.

Intenté escapar de los dos puntos (:) con ':', '::' pero sin éxito.

versión 3.2 La hibernación es

Respuesta

4

No consumo PostgreSQL pero si no encuentra una solución adecuada para este problema se puede implementar un interceptor (extender EmptyInterceptor) y modificar su consulta en onPrepareStatement(String sql).

Lo que significa que podría utilizar algo así como my_array[1|300] y volver a escribir como my_array[1:300] para solucionar el problema parámetros con nombre.

Editar: No estoy 100% seguro de que lo anterior funcione (reescribiendo SQL nativo y si el analizador de consultas permitiría el carácter especial). Solo he hecho lo anterior en HQL y los criterios en los que estaba pasando la sugerencia de índice como un comentario de consulta.

+0

Gracias, funciona también con consultas nativas :) – dime

3

El colon no se puede escapar en Hibernate (conocido Bug desde 2005).

1
create function array_slice(a anyarray, start int4, end int4) returns anyarray as 
$$ 
    SELECT a[start:end]; 
$$ 
language(sql); 

Ahora llama a esta función en su lugar. No lo probé pero funcionará de alguna manera así.

1

MyInterceptor extends EmptyInterceptor funciona como lo menciona cherouvim.

no se olvide

<property name="hibernate.ejb.interceptor" value="MyInterceptor"/> 

en persistence.xml

Cuestiones relacionadas