It works, since the query is executed. Petr, it's not a bug, it's simply not a supported feature. But please add it to JIRA. It would be a nice addition.
2015-04-21 16:08 GMT+02:00 Leo Y <[email protected]>: > Your first (native) code doesn't execute queries. Do you miss a code line > in your example or it's working because it does nothing? > > > On Monday, April 20, 2015 at 5:31:40 PM UTC+3, Petr Waclawek wrote: >> >> I'm trying to optimize the performance of database operations for a >> typical parent-child entities scenario. In my case I would like to delete >> all children and update the parent's record timestamp in one call to >> database. I'm only able to do it using Native SQL (which I would like to >> avoid): >> >> private static void ClearUsingNativeSql(ISession session, >> ParentItem p) >> { >> var q1 = >> session.CreateSQLQuery("delete from Child_Items where >> Parent_id = :parentId1") >> .SetParameter("parentId1", p.Id) >> .FutureValue<int>(); >> >> >> var q2 = >> session.CreateSQLQuery("update Parent_Items set >> timestamp = :timestamp where parent_item_Id = :parentId2") >> .SetParameter("parentId2", p.Id) >> .SetParameter("timestamp", DateTime.Now) >> .FutureValue<int>(); >> >> >> _log.Info("Runing native SQL queries"); >> var dummy = q2.Value; >> } >> >> >> When I'm trying to use HQL with MultiQuery / Future queries, I'm getting >> the following null reference exception: >> >> System.NullReferenceException: Object reference not set to an instance of >> an object. >> at NHibernate.Impl.MultiQueryImpl.AggregateQueriesInformation() >> at NHibernate.Impl.MultiQueryImpl.get_Parameters() >> at NHibernate.Impl.MultiQueryImpl.CreateCombinedQueryParameters() >> at NHibernate.Impl.MultiQueryImpl.List() >> at NHTest1.Program.ClearUsingMultiQuery(ISession session, ParentItem >> p) in c:\Projects\Test\NHTest\NHTest1\Program.cs:line 238 >> at NHTest1.Program.<>c__DisplayClassf.<BatchHqlTest>b__b(ISession >> session) in c:\Projects\Test\NHTest\NHTest1\Program.cs:line 165 >> at NHTest1.Program.RunInTransaction(Action`1 action, ISession session) >> in c:\Projects\Test\NHTest\NHTest1\Program.cs:line 332 >> at NHTest1.Program.BatchHqlTest(String[] args) in >> c:\Projects\Test\NHTest\NHTest1\Program.cs:line 152 >> >> Here is the code, I'm using: >> >> private static void ClearUsingMultiQuery(ISession session, >> ParentItem p) >> { >> var q1 = session >> .CreateQuery("delete from ChildItem c where c.Parent = >> :parentId1") >> .SetParameter("parentId1", p.Id); >> >> >> var q2 = session >> .CreateQuery("update ParentItem p set p.Timestamp = >> :timestamp where p.Id = :parentId2") >> .SetParameter("timestamp", DateTime.Now) >> .SetParameter("parentId2", p.Id); >> >> >> var q = session.CreateMultiQuery().Add(q1).Add(q2); >> >> >> _log.Info("Runing multiplqueriy"); >> var dummy = q.List(); >> } >> >> >> >> or >> >> private static void ClearUsingFuture(ISession session, ParentItem >> p) >> { >> var q1 = session >> .CreateQuery("delete from ChildItem c where c.Parent = >> :parentId1") >> .SetParameter("parentId1", p.Id) >> .FutureValue<int>(); >> >> >> var q2 = session. >> CreateQuery("update ParentItem p set p.Timestamp = >> :timestamp where p.Id = :parentId2") >> .SetParameter("parentId2", p.Id) >> .SetParameter("timestamp", DateTime.Now) >> .FutureValue<int>(); >> >> >> _log.Info("Runing multiquery"); >> var dummy = q2.Value; >> } >> >> >> Digging into NH source code I found that it might be a problem of >> multi-queries - the framework does not accept non-select queries. >> >> Is the MultiQuery meant to be used for updates too? Or is it a bug I >> should report on NHibernate Jira? >> >> Thanks for any advice. >> > -- > You received this message because you are subscribed to the Google Groups > "nhusers" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/nhusers. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "nhusers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/nhusers. For more options, visit https://groups.google.com/d/optout.
