1

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 ...

誰かがこの種のことをした経験があるなら、遠慮なく助けてください。また、DateTimesでHQLキャストを使用する方法を知っている場合も役立ちます。DBMSはMSSQL2008です。

4

1 に答える 1

2

キャストする必要はありません。パラメータを正しいタイプとして設定するだけです。たとえば、

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

session.CreateQuery(hql)
  .setDateTime("date", DateTime.Now)
  .ExecuteUpdate();
于 2012-04-24T07:58:06.597 に答える