HQL のストアド プロシージャを使用して現在のタイムスタンプを取得しようとしています。これは、私のコードが次のようになることを意味します。
var currentTimestamp =
session.CreateQuery("SELECT CURRENT_TIMESTAMP()")
.UniqueResult<DateTime>();
これはうまくいきません。具体的にSystem.NullReferenceException
は、NHibernate HqlParser.cs ファイルの奥深くにスローします。私はこれを少しいじって、代わりに次のように動作させました:
var currentTimestamp =
session.CreateQuery("SELECT CURRENT_TIMESTAMP() FROM Contact")
.SetMaxResults(1)
.UniqueResult<DateTime>();
必要なデータはありますが、HQL クエリはありません。元の形式のように、クエリで質問を表現したいと思います。
ここでの明白な質問は、「なぜ HQL を使用しているのですか?」です。session.CreateSQLQuery(...)
MySQL 5.1 データベースに直接アクセスして、これを簡単に実行できることはわかっています。これは単に私の中心的な問題の例です。コードベース全体でパラメーターのないカスタム HQL 関数を使用していることが根本にあり、これらの HQL パラメーターのない関数をできるだけ分離して実行する統合テストが必要です。可能。
私のハックには、いくつかの重大な仮定が組み込まれています。たとえば、Contact テーブルにレコードがない場合、または Contact テーブルが存在しなくなった場合、結果は返されません。