【问题标题】:JPA 2.1 error : No @NamedStoredProcedureQuery was found with that name :JPA 2.1 错误:没有找到具有该名称的 @NamedStoredProcedureQuery:
【发布时间】:2015-06-24 05:50:44
【问题描述】:

我尝试从postgresSql函数中获取数据,我用了这个例子here

在具有 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**

我应该在哪里插入注释?怎么了?

谢谢

【问题讨论】:

  • 你忘了@Entity注解吗?
  • 我试过有没有@Entity

标签: java hibernate entities jpa-2.1 sqlresultsetmapping


【解决方案1】:

我尝试过这种方式并且它正在工作,但是当函数发回一个列表时,我不知道如何获取所有组件并将其插入到列表中:

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

【讨论】:

    【解决方案2】:

    已修复。 我改变了我的代码:

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

    Account 构造函数上:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-25
      • 1970-01-01
      • 2017-08-04
      • 2021-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多