2012-04-23 7 views
1

エンティティにマップしたテーブルにいくつかのパラメータを挿入するためにHQLのinsert文を実行しようとしています。ここで日付型の名前付きパラメータをHQLに挿入します。

は、私は現在、(例外をスローする)に取り組んでいますものです:

Insert Into Entity1 
(ForeignKey1, ForeignKey2, Date1, Date2) 

SELECT this_.ForeignKey1, 
     cast(:param1 as int) as ForeignKeyValue2, 
     cast(:param2 as DateTime) as DateValue1, 
     cast(:param3 as DateTime) as DateValue2 
FROM OtherEntity this_ 
WHERE ... 

私は2つの日付フィールドの挿入作品を残して、私は、私は近くだということをわかっている場合。私はちょうど日付として日付を見るためにnhibernateを得る方法を理解する必要があります。

例外:誰もがこの種のものをやっての経験を持っている場合

insertion type [NHibernate.Type.Int32Type] and selection type 
[NHibernate.Dialect.Function.CastFunction+LazyType] at position 1 are not compatible 
[Insert Into Entity1 
(ForeignKey1, ForeignKey2, Date1, Date2) 

SELECT this_.ForeignKey1, 
     cast(:param1 as int) as ForeignKeyValue2, 
     cast(:param2 as DateTime) as DateValue1, 
     cast(:param3 as DateTime) as DateValue2 
FROM OtherEntity this_ 
WHERE ... 

は助けること自由に感じなさい。また、あなたがHQLを使用してDateTimesにキャストする方法も知っていれば助かります。 DBMSはMS SQL 2008です。:

+0

なぜSQLキャストですか? NHコールから適切なパラメータタイプを送信するだけではどうですか? –

+0

パラメータを設定するコードを確認できますか? – Rippo

答えて

2

キャストする必要はありません。

var hql = "insert into Entity1 (fkid, mydate) 
    select fkid, :date from OtherEntity"; 

session.CreateQuery(hql) 
    .setDateTime("date", DateTime.Now) 
    .ExecuteUpdate(); 
+0

これを試してみますと、null参照例外が発生します。これが実際にあなたのために働くと仮定すると、私はまだ2.1.2を使用しているので、私のnhibernate DLLを更新しようとします。私は結果を投稿します。ありがとう –

+0

投稿してください)idと日付フィールドのデータベース構造、2)実際の例外(内側のもの) – Rippo

+0

内部例外はありません。これは、session.CreateQuery(myQueryString)を呼び出すとスローされるnull参照例外です。 IDは問題ではありません。私が言ったように、私が日付パラメータを取り出すと、私が元々持っていた方法でインサートがうまく動作します。そのテーブルの日付フィールドはヌル可能なので、設定せずに挿入できます(パラメータを設定するときに実際の日付を渡すようにしています)。私はまだDLLの更新を取得しています。私はそれを成功させるかどうかを知らせます。 –

関連する問題