2

プレーンなSQLクエリから必要なデータを取得する場合は、次のようにすれば十分です。

select * from stvterm where stvterm_code > TT_STUDENT.STU_GENERAL.F_Get_Current_term()

このテーブルに対してgrailsドメインが正しく設定されており、次のコードを正常に実行できます。

def a = SaturnStvterm.findAll("from SaturnStvterm as s where id > 201797") as JSON
a.render(response)
return false

つまり、Oracle関数の結果をハードコーディングして、HQLを正しく実行することはできますが、関数で試してみることができる方法はありません。procと関数の使用に関するHibernateのドキュメントをいくつか読みましたが、それを理解するのに苦労しています。誰かがこれを処理する適切な方法について私にヒントを与えることができますか?

また、おそらく関連性があると思うので、schema.package.function()として修飾せずに関数を呼び出すことができる同義語はありません。それは物事をより困難にするだろうと確信しています。これはすべてGrails1.3.7の場合ですが、必要に応じて新しいバージョンを使用することもできます。

4

1 に答える 1

1

HQLで関数を呼び出すには、SQLダイアレクトがそれを認識している必要があります。BootStrap.groovy次のように、実行時に関数を追加できます。

import org.hibernate.dialect.function.SQLFunctionTemplate
import org.hibernate.Hibernate

def dialect = applicationContext.sessionFactory.dialect
def getCurrentTerm = new SQLFunctionTemplate(Hibernate.INTEGER, "TT_STUDENT.STU_GENERAL.F_Get_Current_term()")
dialect.registerFunction('F_Get_Current_term', getCurrentTerm)

登録すると、クエリで関数を呼び出すことができるようになります。

def a = SaturnStvterm.findAll("from SaturnStvterm as s where id > TT_STUDENT.STU_GENERAL.F_Get_Current_term()")
于 2012-07-09T16:00:26.917 に答える