2012-07-17 59 views
1

我在EJB代碼中遇到了一個問題。下面是我的代碼,它部署在Weblogic的10.3.3:java.lang.IllegalArgumentException:在EJB中找不到名稱爲MY_FUNCTION的NamedQuery

@Entity 
@NamedStoredFunctionQuery(name = "MY_FUNCTION", functionName = "apipay", 
    parameters = { 
     @StoredProcedureParameter(
      queryParameter = "consubflag", name = "consubflag", direction = Direction.IN, type=String.class), 
     @StoredProcedureParameter(
      queryParameter = "contrno", name = "contrno", direction = Direction.IN, type=String.class), 
     @StoredProcedureParameter(
      queryParameter = "username", name = "username", direction = Direction.IN, type=String.class) 
    }, 
    returnParameter = 
     @StoredProcedureParameter(
      queryParameter = "paymentid", type = String.class) 
) 
public class MyPayment implements Serializable { 

    @Id 
    String paymentid; 
    String consubflag; 
    String contrno; 
    String username; 
} 

以下是從我打電話EJB代碼:

Query q = tabsEntityManager.createNamedQuery("MY_FUNCTION"); 
q.setParameter("consubflag", "S"); 
q.setParameter("contrno", contrno); 
q.setParameter("username", "ATMGTW"); 

paymentId = (String) q.getSingleResult(); 

以下是我的persistence.xml:

<persistence-unit name="PU1" transaction-type="JTA"> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
     <jta-data-source>jdbc/myDS1</jta-data-source> 
     <class>com.MyPayment</class> 
</persistence-unit> 
<persistence-unit name="PU2" transaction-type="JTA"> 
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
     <jta-data-source>jdbc/myDS2</jta-data-source> 
     <class>com.MyRequest</class> 
    </persistence-unit> 
</persistence> 

完整的錯誤堆棧跟蹤:

java.lang.IllegalArgumentException: NamedQuery of name: My_FUNCTION not found. 
     at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getDatabaseQueryInternal(EJBQueryImpl.java:545) 
     at org.eclipse.persistence.internal.jpa.EJBQueryImpl.setParameterInternal(EJBQueryImpl.java:1145) 
     at org.eclipse.persistence.internal.jpa.EJBQueryImpl.setParameter(EJBQueryImpl.java:1032) 
     at org.eclipse.persistence.internal.jpa.EJBQueryImpl.setParameter(EJBQueryImpl.java:71) 
     at com.warid.es.onelink.facade.TopUpControllerBean.postPaidPayment(TopUpControllerBean.java:594) 

我在Java SE應用程序中嘗試了相同的代碼,它工作正常。

回答

1

NamedStoredFunctionQuery在EclipseLink 2.3.x中引入,根據documentation WebLogic 10.3.3.0隨EclipseLink 2.0.2一起發佈。

這就是爲什麼在部署過程中忽略註釋以及未找到在@NamedStoredFunctionQuery中定義的查詢。

+0

感謝您的更新,我們可以在weblogic 10.3.3中啓用EclipseLink 2.3.x支持嗎? – ImranRazaKhan 2012-07-17 07:43:24

+0

看起來不太容易。您可以在鏈接後面找到一些關於使用JPA 2實現的相關說明:http://wiki.eclipse.org/EclipseLink/Examples/JPA/WebLogic_Web_Tutorial(與答案中相同)。 – 2012-07-17 08:04:49

相關問題