JPA Hibernate Call-Postgres-Funktion Void Zurückgeben MappingException:

Ich habe ein problem wo ich bin immer ein: org.hibernate.MappingException: Keine Dialekt-mapping für JDBC-Typ: 1111 wenn Sie versuchen zu nennen, eine postgres-Funktion mit JPA erstellen Sie native query.

Erstellte ich eine EJB-timer in einem startup singleton ausgeführt, eine Postgres-Funktion alle 6 Stunden. Die Funktion gibt void zurück und sucht nach abgelaufener Datensätze löscht Sie, und einige Status-updates. Es nimmt keine Argumente und gibt void zurück.

  • Postgres-Funktion läuft perfekt, wenn ich rufe es mit PgAdmin-Abfrage-tool (wählen Sie die Funktion();) und gibt void zurück.
  • Wenn ich das bereitstellen der app auf Glassfish 3.1.1 bekomme ich eine Ausnahme und ein Fehler bereitstellen.

Dies ist die (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:

Erste, der PPV stuff:

public void runRequestCleanup() {
    String queryString = "SELECT a_function_that_hibernate_chokes_on()";
    Query query = em.createNativeQuery(queryString);
    Object result = query.getSingleResult();
}

Dies ist die singleton-Aufruf:

@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;

InformationsquelleAutor Bill Rosmus | 2012-09-24

Schreibe einen Kommentar