【问题标题】:createStoredProcedureQuery is not resolvedcreateStoredProcedureQuery 未解决
【发布时间】:2015-12-09 03:27:43
【问题描述】:

这是我的代码,createStoredProcedureQuery 在eclipse下面有红线,但没有解决,我尝试了很多方法仍然无法解决问题。

private static EntityManagerFactory factory;

public static void main(String[] args) {
    factory = Persistence.createEntityManagerFactory("mypersistenceUnit");
    EntityManager em = factory.createEntityManager();

    // Create call stored procedure
    em.getTransaction().begin();
    StoredProcedureQuery storedProcedure = em.**createStoredProcedureQuery**("getCode");
    // set parameters
    storedProcedure.registerStoredProcedureParameter("name", String.class, ParameterMode.IN);
    storedProcedure.registerStoredProcedureParameter("num", String.class, ParameterMode.IN);
    storedProcedure.registerStoredProcedureParameter("code", String.class, ParameterMode.OUT);

    // execute SP
    storedProcedure.execute();
    // get result
    String code= (String)storedProcedure.getOutputParameterValue("code");
    System.out.println("code is: " + code);
    em.getTransaction().commit();
    em.close();
}

【问题讨论】:

  • StoredProcedureQuery storedProcedure = em.**createStoredProcedureQuery**("getCode");您是实际代码的 ** 部分,还是只是在为 Eclipse 描述它
  • 你的类路径中是否有所有必要的 jars(如 hibernate-entitymanager.jar),如果没有,你也可能在 em.getTransaction() 中得到那些波浪线。 @user1765427
  • ** 我是否尝试使其粗体,而不是代码的一部分,我确实在类路径上有 hibernate-entitymanager.jar 有以下内容:hibernate-entitymanager.jar、hibernate-ejb3-persistence、hibernate-注释、hibernate-core、hibernate-eh-cache、hibernate-jpa-2.0.-api、1.0.0.Final、hib-oscache、proxool
  • 尝试构建它,看看它是否抱怨任何编译错误?也在尝试退出并返回eclipse
  • 是的,它在构建时给了我编译错误:符号:方法 createStoredProcedureQuery(String) 位置:EntityManager 类型的变量 em,退出 Eclipse 没有帮助。

标签: java hibernate jpa stored-procedures dns


【解决方案1】:

你需要声明和设置参数:

/*Declare parameters*/

storedProcedure.registerStoredProcedureParameter( "name",       String.class,ParameterMode.IN);
storedProcedure.registerStoredProcedureParameter( "num",        String.class,ParameterMode.IN);
storedProcedure.registerStoredProcedureParameter("code", String.class, ParameterMode.OUT);



/*set parameter value*/
 storedProcedure.setParameter("name", "value_name");
 storedProcedure.setParameter("num", "value_num");
 storedProcedure.execute();
 // get result
 String code= (String)storedProcedure.getOutputParameterValue("code");

--记住,存储过程中的参数名称必须与声明的相同

【讨论】:

    【解决方案2】:

    JPA 2.1 提供了这种方法。如果您没有在 CLASSPATH 中包含 JPA API 2.1 jar(而是使用 JPA API 2.0),那么您将得到它。修复您的 JPA API jar 版本(删除 JPA API 2.0 并包含 JPA API 2.1)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-12
      • 2021-02-06
      • 2019-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-16
      相关资源
      最近更新 更多