Hibernate HQL:联合收割机;插入到。。。选择";具有固定的参数值

Hibernate HQL:联合收割机;插入到。。。选择";具有固定的参数值,hibernate,hql,Hibernate,Hql,我有一个HQL声明: insert into Item (ost, value, comments, startTime, endTime, proposedBy) select si.ost, si.value, si.comments, si.endTime, si.endTime, u from Item si, User u where si.ost = ? and u.id = ? 如何修改以使用ost和startTime列的参数值,同时从select中获取其他列?无法在HQL

我有一个HQL声明:

insert into Item (ost, value, comments, startTime, endTime, proposedBy) 
select si.ost, si.value, si.comments, si.endTime, si.endTime, u 
from Item si, User u 
where si.ost = ? and u.id = ?

如何修改以使用
ost
startTime
列的参数值,同时从
select
中获取其他列?

无法在HQL中完成;它不允许在select子句中引用参数。

我不知道最后的答案。我正在使用NH3.2,我能够让它工作

var hql = @"INSERT INTO EventFacility (Facility, Event, Owner, Position) 
SELECT f, :evt, :own, :position from Facility f where f.Id IN (105, 109, 110)";

var @event = Session.Get<Event>(351931);
var query = Session.CreateQuery(hql)
                .SetInt32("position", 0)
                .SetEntity("evt", @event)
                .SetEntity("own", @event.Owner);

var x = query.ExecuteUpdate();
Assert.AreEqual(3, x);
var hql=@“插入EventFacility(设施、事件、所有者、职位)
从设施f中选择f,:evt,:own,:位置,其中f.Id位于(105、109、110)”;
var@event=Session.Get(351931);
var query=Session.CreateQuery(hql)
.SetInt32(“位置”,0)
.SetEntity(“evt”,@event)
.SetEntity(“own”、@event.Owner);
var x=query.ExecuteUpdate();
断言.AreEqual(3,x);
在本例中,我需要创建一个新的EventFacility对象。几乎所有你在这里看到的领域。事件实体有另一个实体,所有者挂起它

我们可以使用方法并参考。 此外,由于Hibernate 5.3之后的原因,应将“?”替换为命名参数。(为了更好的可读性和可维护性,即使您使用的是早期版本,也应使用命名参数)

以下方法演示了上述更改:

public void insertIntoSelectWithParameter(字符串ost、LocalDateTime startTime、字符串fromOst、整数fromUserId){
String hql=“插入项目(ost、值、注释、开始时间、结束时间、提议人)”
+选择:ost,si.value,si.comments,:startTime,si.endTime,u
+“来自项目si,用户u”
+“其中si.ost=:fromOst和u.id=:fromUserId”;
Session Session=entityManager.unwrap(Session.class);
Query=session.createQuery(hql);
setParameter(“ost”,ost);
setParameter(“startTime”,startTime);
setParameter(“fromOst”,fromOst);
setParameter(“fromUserId”,fromUserId);
query.executeUpdate();
}

您对此有参考资料吗?