将日期类型的命名参数插入到 HQL 插入中

本文关键字:插入 HQL 参数 日期 类型 | 更新日期: 2023-09-27 18:32:05

我正在尝试执行 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 投射,那也会有所帮助。 DBMS 是 MS SQL 2008:

将日期类型的命名参数插入到 HQL 插入中

你永远不需要强制转换,只需将参数设置为正确的类型,例如

var hql = "insert into Entity1 (fkid, mydate) 
  select fkid, :date from OtherEntity";
session.CreateQuery(hql)
  .setDateTime("date", DateTime.Now)
  .ExecuteUpdate();