Tengo un problema donde recibo una: org.hibernate.MappingException: No Dialecto mapping para tipo JDBC: 1111 cuando intento llamar a una función postgres usando JPA create native query .JPA Hibernate Llamada Postgres Función Void Return MappingException:
Creé un temporizador EJB en un singleton de inicio para ejecutar una función de Postgres cada 6 horas. La función devuelve vacío y comprueba si hay registros caducados, los elimina y actualiza algunos estados. No requiere argumentos y vuelve vacío.
La función postgres funciona perfectamente si yo lo llamo el uso de herramienta de consulta PgAdmin (selección de la función();) y devuelve void.
Cuando implemente la aplicación en Glassfish 3.1.1 recibo una excepción y una falla al implementar.
Este es el (abreviado) seguimiento de la pila:
WARNING: A system exception occurred during an invocation on EJB UserQueryBean method public void com.mysoftwareco.entity.utility.UserQueryBean.runRequestCleanup()
javax.ejb.TransactionRolledbackLocalException: Exception thrown from bean
...STACK TRACE BLAH BLAH BLAH ...
Caused by: javax.persistence.PersistenceException: org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111
Aquí está el código:
Primero las cosas JPA:
public void runRequestCleanup() {
String queryString = "SELECT a_function_that_hibernate_chokes_on()";
Query query = em.createNativeQuery(queryString);
Object result = query.getSingleResult();
}
Esto se llama el singleton se :
@Startup
@Singleton
public class RequestCleanupTimer {
@Resource
TimerService timerService;
@EJB
UserQueryBean queryBean;
@PostConstruct
@Schedule(hour = "*/6")
void runCleanupTimer() {
queryBean.runRequestCleanup();
}
}
Y la función:
CREATE OR REPLACE FUNCTION a_function_that_hibernate_chokes_on()
RETURNS void AS
$BODY$
DECLARE
var_field_id myTable.field_id%TYPE;
BEGIN
FOR var_field_id IN
select field_id from myTable
where status = 'some status'
and disposition = 'some disposition'
and valid_through < now()
LOOP
BEGIN
-- Do Stuff
END;
END LOOP;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
Muy buena idea. Vi la otra respuesta y creo que la tuya es la mejor. – luizcarlosfx
Tanto tuyo como el método de @Kikin-Sama funcionaron. – BillR