2016-02-11 41 views

回答

0

这是一个奇怪的,但可能的。 Grails/GORM不提供执行存储过程的方法。这只是ORM功能的一部分。而Hibernate也没有。但是,Hibernate确实提供了对JDBC连接的访问​​。所以你可以从Hibernate获得连接,然后用连接创建一个Groovy Sql实例,最后执行你的存储过程。这里有一个例子:

import groovy.sql.Sql 

SomeDomainClass.withNewSession { session -> 
    session.doWork { java.sql.Connection connection -> 
     def sql = new Sql(connection) 

     sql.call("YOUR STORED PROCEDURE SQL HERE") 
    } 
} 

它的工作原理是这样的:

  1. 使用您的任何领域类的,叫withSession(Closure)得到一个Hibernate会话。
  2. 通过会话,请致电doWork(Work)访问会话的JDBC连接。现在,doWork(Work)预计执行org.hibernate.jdbc.Work。但是,如果我没有记错,Groovy可以使用相同的参数来实现闭包,并强制它实现接口。
  3. 使用连接,创建一个Sql实例。你可以跳过这个并用Java查询,但Groovy的Sql类非常好。
  4. 使用可用的Sql.call()方法之一来执行存储过程。
0

对于那些在Grails 3中使用此方法时没有现有会话的快速注释,您需要将SomeDomainClass.withSession替换为SomeDomainClass.withNewSession

谢谢Emmanuel为您节省了大量时间!还有杜尔加为了要求我们需要的东西!

(我目前没有足够的信誉发表评论,但这是提交的灵光这里的答案评论)