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.

Reply via email to