如何在hibernate 3中执行存储过程

时间:2012-07-09 12:35:35

标签: java hibernate stored-procedures

我是hibernate的新手。我正在使用hibernate注释在我的应用程序中使用hibernate 3,我正在使用struts 1.3开发应用程序。

我的问题是: 我已经google了很多但是无法理解如何在使用注释的hibernate中调用存储过程,我有一个简单的场景:假设我的jsp中有2个字段说1)代码2)名称,我在数据库中创建了一个存储过程,用于将这些记录插入表中。现在我的问题是如何执行它

 List<MyBean> list = sessionFactory.getCurrentSession()
                          .getNamedQuery("mySp")
                        .setParameter("code", code)
                        .setParameter("name", name)

我不知道确切的代码如何执行此操作。但我想这样的事实上我来自jdbc背景,因此当使用存储过程从数据库中选择数据时,我不知道如何做到这一点和我想要的一样。

2 个答案:

答案 0 :(得分:2)

Hibernate提供了许多简单的方法来调用SP,如

  1. 原生SQL
  2. 在本机SQL中将命名查询作为注释/ XML映射文件
  3. 以下链接显示了上述各项的实施方式

    http://www.mkyong.com/hibernate/how-to-call-store-procedure-in-hibernate/

    http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querysql.html#sp_query

    使用hibernate运行本机SQL查询的示例:

     Session session = getSession();
        SQLQuery sqlQuery = session.createSQLQuery("SELECT COUNT(id) FROM tableName WHERE external_id = :external_id");
        sqlQuery.setParameter("external_id", idValue);
        int count = ((BigInteger) sqlQuery.uniqueResult()).intValue();
        releaseSession(session);
    

答案 1 :(得分:0)

您可以使用Hibernate SQLQuery执行存储过程,使用与对数据库调用时相同的SQL。例如,在postgreSQL中:

String query = "select schema.procedure_name(:param1)";
SQLQuery sqlquery = sessionFactory.getCurrentSession().createSQLQuery(query);
sqlquery.setInteger("param1", "this is first parameter");
sqlQuery.list();

希望它有所帮助。