Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA 2.1错误:未找到具有该名称的@NamedStoredProcedureQuery:_Java_Hibernate_Entities_Jpa 2.1_Sqlresultsetmapping - Fatal编程技术网

Java JPA 2.1错误:未找到具有该名称的@NamedStoredProcedureQuery:

Java JPA 2.1错误:未找到具有该名称的@NamedStoredProcedureQuery:,java,hibernate,entities,jpa-2.1,sqlresultsetmapping,Java,Hibernate,Entities,Jpa 2.1,Sqlresultsetmapping,我试图从postgresSql函数中获取数据,我使用了这个示例 在具有输入/输出数据的映射类下面: @XmlType(name="AccountRR") @NamedStoredProcedureQuery ( name="getAccountMapping", procedureName="accountFunction", parameters = { @StoredProcedureParameter(name="in_ro

我试图从postgresSql函数中获取数据,我使用了这个示例

在具有输入/输出数据的映射类下面:

@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();
}
我应该在哪里插入注释?怎么了


谢谢

我尝试了这种方法,但当函数返回列表时,我不知道如何获取所有组件并将其插入列表:

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);
固定的。 我更改了代码:

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

您忘记了
@Entity
注释了吗?我尝试了使用和不使用
@Entity
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];           
    }