Domanda

    EntityManager em = getEntityManager();

    EntityTransaction etx = em.getTransaction();
    etx.begin();

    Query query = em.createNamedQuery("login_procedure").setParameter("param1","user").setParameter("param2", "pw");


    Integer result = 23;
    try {
        System.out.println("query = " + query.getSingleResult());
    } catch (Exception e) {
        result = null;
        e.printStackTrace();
    }

    etx.commit();
    em.close();

... eseguire questo codice che ottengo

EL AVVERTENZA]: 2011-02-10 17: 32: 16.846-Unitofwork (1267140342)-Eccezione [Eclipselink-4002] (Eclipse Persistence Services-1.2.0.V20091016-R5565): org.eclipse.Persistence.exceptions .Databasexception Eccezione interna: org.firebirdsql.jdbc.fbsqlexception: eccezione GDS. 335544569. Errore SQL dinamico Codice di errore SQL = -104 Sconosciuto token - riga 1, colonna 36 = Codice di errore: 335544569 Chiama: eseguire procedura login_procedure (user_name =?, User_password =?) Bind => [utente, pw] query: DataReadQuery ( name = "login_procedure")

L'errore SQL -104 di solito indica un errore di sintassi SQL.

Tutto viene elaborato senza alcun errore fino a quando non viene chiamato query.getSingleResult (). Chiamare query.getResultList () non cambia nulla. Ho provato diverse versioni Eclipselink 1.x e 2.x. La versione Firebird DB è 2.1.

La dichiarazione JPA2 è:

    @Entity
@NamedStoredProcedureQuery(
        name = "login_procedure",
        resultClass = void.class,
        procedureName = "LOGIN_PROCEDURE",
        returnsResultSet = false,
        parameters = {
                @StoredProcedureParameter(queryParameter = "param1", name = "USER_NAME", direction = Direction.IN, type = String.class),
                @StoredProcedureParameter(queryParameter = "param2", name = "USER_PASSWORD", direction = Direction.IN, type = String.class)
        }
)
@Table(name = "USERS")
public class Login implements Serializable {
    @Id
    private Long id;
}

AGGIORNAMENTO: dopo aver armeggiato un po 'di più, credo che potrebbe esserci un errore nell'implementazione Eclipselink come Esegui procedura login_procedure (user_name =?, User_password =?) non è valida la sintassi Firebird 2.1 per le procedure di chiamata.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top