2017-06-08 6 views
0

私はGrails 2.4.0で作業しています。 Groovy Controllerでネイティブクエリーを実行したい。クエリは以下の通りです:Grails 2.4.0でネイティブSQLクエリを書くには?

SELECT AVG(REPLACE(n.ep_text, 'PPM', '')), MONTH(n.date_creat) 
from notification n 
where n.type = 42 
GROUP BY MONTH(n.date_creat) 

はまず、私は上記のクエリを実行するが、関数のようREPLACE発見していないです:私はでき REPLACE関数を実行するためにはどうすればよい

String query1 = "SELECT n.id, avg(REPLACE(n.epText, 'PPM', '')) FROM Notification as n"; 
def result = Notification.executeQuery(query1.toString()) 

その中に?

第2に、R & Dがありますが、ネイティブクエリを実行してsessionFactoryが必要です。 Grails 2.4.0でHibernateの現在のセッションを取得してネイティブクエリを実行する方法を理解できませんか?

ご協力いただければ幸いです。

+0

'まず、上記のクエリを実行しますが、REPLACE関数が見つかりませんでした。 mysqlからのエラーでしたか?エラーを出すことはできますか? – daggett

答えて

0

ネイティブクエリを使用するには、BeanであるSessionFactoryを使用できます。これをGrailsコントローラまたはサービスに宣言するだけで、依存関係注入によって処理されます。ここでは、このBeanを使用してネイティブクエリを実行するサンプルコードを示します。

class PublicService { 
    def sessionFactory 
    def getMatchedValue(){ 
     def currentSession = sessionFactory.currentSession 
     def q = "select bank.id as id, bank.credit_amount as creditAmount, bank.debit_amount as debitAmount, bank.transaction_date as transactionDate, bank.transaction_name as transactionName, receipt.cr_date as crDate, receipt.picture_reference as pictureReference, receipt.receipt_date as receiptDate, receipt.reimbursment as reimbursment, receipt.total_amount as totalAmount, receipt.vendor as vendor " + 
       "from bank inner join receipt on bank.debit_amount=receipt.total_amount where ((bank.transaction_date >= receipt.receipt_date) and (bank.transaction_date <= DATE_ADD(receipt.receipt_date, INTERVAL 5 DAY)))"//sample native query 
     def data = currentSession.createSQLQuery(q) 
     data.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);//if you are using alias for query e.g bank.credit_amount as creditAmount 
     final result = data.list() 
     return result 
    } 
}