Ich habe ein Problem, wo ich bekomme ein: org.hibernate.MappingException: Keine Dialekt Zuordnung für JDBC Typ: 1111 beim Versuch, eine Postgres-Funktion mit JPA erstellen native Abfrage aufrufen .JPA Hibernate Call Postgres Funktion Void Return MappingException:
Ich habe ein EJB-Timer in einem Start-Singleton einer Postgres-Funktion alle 6 Stunden laufen. Die Funktion gibt void zurück und prüft auf abgelaufene Datensätze, löscht sie und aktualisiert einige Status. Es braucht keine Argumente und es ist ungültig.
Die Postgres Funktion läuft perfekt, wenn ich es PgAdmin Abfrage-Tool aufrufen (Auswahlfunktion();) und void zurückgibt.
Wenn ich die Anwendung auf Glassfish 3.1.1 bereitstellen erhalte ich eine Ausnahme und einen Fehler zu implementieren.
Das ist der (verkürzte) Stack-Trace:
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
Hier ist der Code:
Zuerst wird das Material JPA:
public void runRequestCleanup() {
String queryString = "SELECT a_function_that_hibernate_chokes_on()";
Query query = em.createNativeQuery(queryString);
Object result = query.getSingleResult();
}
Dies ist der Singleton es anruft, :
@Startup
@Singleton
public class RequestCleanupTimer {
@Resource
TimerService timerService;
@EJB
UserQueryBean queryBean;
@PostConstruct
@Schedule(hour = "*/6")
void runCleanupTimer() {
queryBean.runRequestCleanup();
}
}
Und die Funktion:
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;
Sehr gute Idee. Ich habe die andere Antwort gesehen und denke, dass deine die Beste ist. – luizcarlosfx
Sowohl Ihre als auch @ Kikin-Sama's Methode hat funktioniert. – BillR