Question

    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();

... exécuter ce code que j'obtiens

El Warning]: 2011-02-10 17: 32: 16.846 - Unitofwork (1267140342) - Exception [Eclipselink-4002] (Eclipse Persistance Services - 1.2.0.v20091016-R5565): org.eclipse.persistence.exceptions .DATABASEException Exception interne: org.fireBirdsql.jdbc.fbsqlexception: exception GDS. 335544569. Erreur SQL dynamique Code d'erreur SQL = -104 Token Inconnu - Ligne 1, colonne 36 = Code d'erreur: 335544569 Appel: Exécuter la procédure Login_ProcedUre (user_name =?, User_Password =?) Bind => [User, PW] Query: DatareadQuery name = "login_procedure")

L'erreur -104 SQL indique généralement une erreur de syntaxe SQL.

Tout est traité sans aucune erreur jusqu'à ce que Query.getSingleResult () soit appelé. Appeler query.getResultList () ne change rien. J'ai essayé plusieurs versions 1.x et 2.x eclipselink. La version Firebird DB est 2.1.

La déclaration JPA2 est:

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

MISE À JOUR: Après avoir bricolé un peu plus, je pense qu'il pourrait y avoir une erreur dans l'implémentation Eclipselink comme Exécuter la procédure login_procedure (user_name =?, User_password =?) n'est pas une syntaxe Firebird 2.1 valide pour les procédures d'appel.

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top