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();
執行存儲在程序火鳥...執行此代碼我得到使用JPA NamedStoredProcedureQuery
[EL警告]:2011-02-10 17:32:16.846 - 的UnitOfWork(1267140342 ) - 異常 [的EclipseLink-4002](Eclipse的 持久性服務 - 1.2.0.v20091016-r5565):org.eclipse.persistence.exceptions.DatabaseException 內部異常: org.firebirdsql.jdbc.FBSQLException: GDS例外。 335544569.動態SQL 錯誤SQL錯誤代碼= -104令牌 未知 - 線1,列36 =錯誤代碼:335544569呼叫:EXECUTE PROCEDURE LOGIN_PROCEDURE(USER_NAME = ,USER_PASSWORD =?)結合=> [用戶, PW ]查詢: DataReadQuery(名稱= 「LOGIN_PROCEDURE」)
的-104 SQL錯誤通常表示一個SQL語法錯誤。
在調用query.getSingleResult()之前,所有處理都沒有任何錯誤。調用query.getResultList()不會改變任何東西。我已經嘗試了幾個1.x和2.x EclipseLink版本。 Firebird數據庫版本是2.1。
的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;
}
UPDATE: 擺弄一點點之後,我相信有可能會在EclipseLink的實施是一個錯誤EXECUTE PROCEDURE LOGIN_PROCEDURE(USER_NAME =,USER_PASSWORD =? )不適用於調用過程的Firebird 2.1語法。
得到:「調用:EXECUTE PROCEDURE LOGIN1(param1 =?)」,但錯誤保持不變。實際上包含的括號不是有效的FB SQL語法。有效的FB SQL語法看起來應該像「EXECUTE PROCEDURE LOGIN1?」 – Alex 2011-02-16 05:55:26