2011-03-15 16 views
0

私はこのチャンスが、少なくとも半数以上の回答で報告されているのを見ました。流暢なNHibernate RegisterFunction SQLFunctionTemplateの使用

私の問題は、MySQLデータベース関数が定義されていることです。私は "my_func(int val)returns int"を呼び出します。これはデータベースで直接テストするとうまく動作します。

私も大丈夫です、私のリポジトリの実装を、パススルーそれは、直接SQLで動作するように、私はいくつかの神の恐ろしい理由でHQLを通るルートを、かなり思いもらいました

...

Soが私は関数を登録するためのMySQL5Dialect設定を持っており、予想される規約を解析するのが難しいです。

私の理解では、関数名の前に "dbo"を付ける必要があります。機能登録中のある時点で?

このような何か、私のリポジトリを通じて

//... 
RegisterFunction("my_func", new SQLFunctionTemplate(NHibernateUtil.Int32, "my_func(?1)")); 
//... 

そして、

FindByHQLはIListのを返し
var value = repository.FindByHQL<int>("select my_func(2)").Single(); 

これはうまくいかないと思っています。

私は最新のWAMPを実行しています(2.1eと思います)。

十分な情報?私が詳細を提供できるかどうかを教えてください。

おかげで、

マイケル

答えて

0
select my_func(2) 

は関係なく、関数が登録されているかどうかのか、HQL有効ではありません。

これを使用する場合は、代わりにSQLを使用できます。

スタックトレースで例外が発生していない場合は、完全な例外を投稿してください。これは単なる単純な例です。

+0

おそらく私は質問を言い換えることができます。私はこの関数で何をしたいのですか? SQLのルートは当面取り組んでいますが、ORMを潜在的に損なう可能性があり、データベースを破壊する可能性があるため、データベースをあまりにも多く公開するのは控えめです。 – Michael

+0

私が得るエラーの種類は、これらの行に沿っています。 – Michael

+0

@Michael:HQLでは、エンティティから選択する必要があります。あなたはこれを熟考しています。何らかの理由でDBに残っている機能があります。それは犯罪ではありません。 –