2016-04-08 13 views
1

次の問題がありますが、解決方法はありません。JPA 2.0でストアドプロシージャを実行

@NamedNativeQuery(name = "my_stored_proc",query = "? = exec EMIR_GUI.get_OTCLite_ACKNACK_Report ?", resultClass = EmirFacade.class) 
@Entity 
public class EmirFacade { 
@Column(name="MessageType", nullable=false) 
@Basic(fetch = FetchType.EAGER) 
private String mesageType; 

マイ豆:2008年 はその後、私は@NamedNativeQueryと@Entityクラスを持っている私のMSSQL Server上: は、私は1つのパラメータ(YYYY-MM-DD形式の日付)を持つストアドプロシージャを持っていますクラスは次のようになります。

@PersistenceContext(unitName=Globals.__TWHUNITNAME) 
private EntityManager em; 

public List<EmirFacade> get_EmirReport(Date date) { 
    try { 
     @SuppressWarnings("unchecked") 
     Query q = em.createNamedQuery("my_stored_proc").setParameter(1, date); 
     List<EmirFacade> emir_report = q.getResultList(); 
     //List emir_report = q.getResultList(); 
     return emir_report; 
    } catch (Exception e) { 
     return Collections.emptyList(); 
    } 
} 

、私はいつも インデックス「0」は範囲外である(それはドイツ語であるので、私は私ができる限り良いとしてそれを翻訳しなければならない)、次のエラーメッセージを取り戻します。

私はほとんどすべてを試しましたが、問題を解決する方法が見つかりません。

多分、誰かが私のために良い提案をしていますか?

ありがとうございました!あなたは、単に行うことができますが、JPA 2.1に切り替えることができます(と私は強くあなたがそうすることを提案する)場合

答えて

1

StoredProcedureQuery storedProcedure = em.createStoredProcedureQuery("yourStoredprocedure"); 
    // set parameters 
    storedProcedure.registerStoredProcedureParameter("parameterName", String.class, ParameterMode.IN); 
    storedProcedure.setParameter("parameterName", "yourParameter"); 
    // execute stored procedure   
    storedProcedure.execute(); 

が、それ以外の場合はもう少し複雑ですが、単にthis tutorialに従ってください。

+0

ありがとう、私はJPA 2.1をどのように統合できるのか見なければなりません。古い方法を試して、私はまた非常によく知られていません。 JPA 2.1では、プロジェクトにどのように追加するかを知るための問題が既にあります。 – user3003944

+0

私のプロジェクトにhibernate-jpa-2.1-api-1.0.0.final.jarを追加してStoredProcedureQueryを自分のコードにコピーした後、entitymanager(em)にcreateStoredProcedureQueryへの参照がありません。それ以外は? – user3003944

+0

@ user3003944バージョン4.3からJPAプロバイダとしてHibernateを使用する場合、JPA 2.1が利用可能です。 –

関連する問題