2015-04-17 127 views
1

我试图从PostgreSQL的函数来获取数据,我用这个例子hereJPA 2.1错误:没有@NamedStoredProcedureQuery发现与名称:

下面的映射类IN/OUT数据:

@XmlType(name="AccountRR") 
@NamedStoredProcedureQuery 
(
    name="getAccountMapping", 
    procedureName="accountFunction", 
    parameters = { 
        @StoredProcedureParameter(name="in_route", mode=ParameterMode.IN, type=String.class), 
        @StoredProcedureParameter(name="in_round", mode=ParameterMode.IN, type=String.class) 
      }, 
    resultSetMappings={"AccountRouteRoundMapping"} 
) 
@SqlResultSetMapping 
(
    name = "AccountRouteRoundMapping", 
    entities = 
    { 
     @EntityResult 
     (
      entityClass = AccountRouteRound.class, 
      fields = 
      { 
       @FieldResult(name = "name",   column = "name"), 
       @FieldResult(name = "address_1", column = "address_1"), 
       @FieldResult(name = "address_2", column = "address_2") 
       [....] 
      } 
     ) 
    } 
) 
public class AccountRouteRound {.............} 

下面,我叫createNamedStoredProcedureQuery

public static List<Account> getAccount(....) 
{ 
    em.getTransaction().begin(); 
    StoredProcedureQuery spq = em.createNamedStoredProcedureQuery("getAccountMapping"); 
    List CustomerRRDList = spq.getResultList(); 
    em.getTransaction().commit(); 
} 

我收到此错误类:

**Caused by: java.lang.IllegalArgumentException: No @NamedStoredProcedureQuery was found with that name : getAccountMapping** 

我应该在哪里插入注释?哪里不对 ?

谢谢

+0

你忘了'@ Entity'注解? – Kayaman

+0

我尝试过使用和不使用'@ Entity' – sanfrareau

回答

1

固定。 我改变了我的代码:

public List<Account> getAccountFromStoreProcedure(EntityManager em, String routeCode, String round) 
{  
     StoredProcedureQuery storedProcedure = em.createStoredProcedureQuery("getAccountFunction"); 
    // set parameters 
     storedProcedure.registerStoredProcedureParameter("in_route", String.class, ParameterMode.IN); 
     storedProcedure.registerStoredProcedureParameter("in_round", String.class, ParameterMode.IN); 
     storedProcedure.setParameter("in_route",routeCode); 
     storedProcedure.setParameter("in_round",round); 
     storedProcedure.executeUpdate(); 

     List<Object> objectList = storedProcedure.getResultList(); 

     for (int i = 0; i< objectList.size(); i++) { 
      Account currAccount = new Account ((Object[]) objectList.get(i)); 
      tmpList.add(currAccount); 
      System.out.println("currAccount : " + currAccount.toString()); } 
    } 

帐户构造:

public Account (Object[] fromStoredProcedure) { 
     super(); 
     this.name   = (String)fromStoredProcedure[0]; 
     this.address_1  = (String)fromStoredProcedure[1]; 
     this.address_2  = (String)fromStoredProcedure[2];   
    } 
0

我试过这样的,它是工作,但是当函数返回一个列表,我不知道我能得到的所有组件,并将其插入到列表:

StoredProcedureQuery storedProcedure = em.createStoredProcedureQuery("getAccountMapping"); 
// set parameters 
storedProcedure.registerStoredProcedureParameter("in_route",  String.class,  ParameterMode.IN); 
storedProcedure.registerStoredProcedureParameter("in_round",  String.class,  ParameterMode.IN); 
storedProcedure.registerStoredProcedureParameter("name",   String.class,  ParameterMode.OUT); 
storedProcedure.registerStoredProcedureParameter("address_1",  String.class,  ParameterMode.OUT); 
storedProcedure.registerStoredProcedureParameter("address_2",  String.class,  ParameterMode.OUT); 
[...........] 
storedProcedure.setParameter("in_route",routeCode); 
storedProcedure.setParameter("in_round",round); 
storedProcedure.execute(); 
String name = (String)storedProcedure.getOutputParameterValue("name"); 
[.......] 
    System.out.println("TEST : "+name); 
相关问题