Google Groups bounced my last message:
All three issue now in JIRA: http://jira.nhibernate.org/browse/NH-1499 http://jira.nhibernate.org/browse/NH-1498 <http://jira.nhibernate.org/browse/NH-1499> http://jira.nhibernate.org/browse/NH-1497 <http://jira.nhibernate.org/browse/NH-1499> On Tue, Sep 23, 2008 at 7:00 AM, Jon Palmer <[EMAIL PROTECTED]> wrote: It turns out there is another bug with that approach if the Person class is a polymorphic class mapped to one table via discriminators (as is the case in my real example). The problem is that the where clause for the discriminator types destroys the Left Outer Join-ness of the query. I'll submit another JIRA ticket :) Thanks Jon P.S. Do you agree that the previous issue I pointed out (that is fixed by the distinct) is also worthy of JIRA? On Mon, Sep 22, 2008 at 11:23 PM, Ken Egozi <[EMAIL PROTECTED]> wrote: try this: select o from Orders o join o.Person p where o is SpecialOrder or person.IsDeleted = 0 On Tue, Sep 23, 2008 at 1:31 AM, Jon Palmer <[EMAIL PROTECTED]> wrote: Ok I see the confusion. My second message could be been clearer in saying: "As well as all SpecialOrders I want my result set to inlcude Orders that are not SpecialOrders but do have a non-deleted Person." I'm building the JIRA test case now. I tried the HQL solution you suggested but I think that shows another bug. If you use your HQL the generated sql is this: select order0_.Id as Id0_, order0_.PersonID as PersonID0_, order0_.Class as Class0_ from Orders order0_, Person person1_ where (order0_.Class='SpecialOrder' )or(person1_.IsDeleted=0 and order0_.PersonID=person1_.Id) As you can see this is very different from the sql I expected. There is no left outer join and as a result the query returns seven results not four (the Special orders are returned N times where N is the number of Rows in the Person table) Any thoughts would be appreciated. Thanks Jon On Mon, Sep 22, 2008 at 1:16 PM, Ken Egozi <[EMAIL PROTECTED]> wrote: I still do not follow. on the first message: all Orders where the order is of type special order or where the Order.Person is not deleted on the second message: I want my result set to inlcude Orders that are not SpecialOrders but do have a non-deleted Person. the reasoning from the table is like in the first message anyway, the NRE looks like a bug, and we'd appreciate a full stack trace and a JIRA issue so we could look it into. meanwhile, does using hql suits you? select o from Orders o where o is SpecialOrder or o.Person.IsDeleted = 0 btw, why did you need a subcriteria? I guess that ICriteria criteria = session.CreateCriteria(typeof (Order)) .CreateAlias("Person", "p") .Add(Restrictions.Or( Property.ForName("class").Eq(typeof(SpecialOrder)), Restriction.Eq("p.IsDeleted", false) )).List(); should have worked right? On Mon, Sep 22, 2008 at 10:15 PM, Jon Palmer <[EMAIL PROTECTED]> wrote: sorry typo in my previous email, should be: "I would expect to get back the first 4 orders but not order 5. " On Mon, Sep 22, 2008 at 12:12 PM, Jon Palmer <[EMAIL PROTECTED]> wrote: Ok I will file the JIRA ticket. I'm not sure how I would use CreateCriteria(typeof(SpecialOrder)). I want my result set to inlcude Orders that are not SpecialOrders but do have a non-deleted Person. Suppose the left join of the Orders and Parties table looks like this Order.ID | Order.Class | Order.PersonID | Person.ID | Person.IsDeleted 1 | SpecialOrder | 1 | 1 | 0 2 | SpecialOrder | 2 | 2 | 1 3 | SpecialOrder | null | null | null 4 | Order | 1 | 1 | 0 5 | Order | 2 | 2 | 1 I would expect to get back the first 4 orders but not order 1. Thanks Jon On Mon, Sep 22, 2008 at 12:04 PM, Ayende Rahien <[EMAIL PROTECTED]> wrote: NRE is a bug, please create a test case and add it to the JIRA. In the meantime, you can use CreateCriteria(typeof(SpecialOrder)) On Mon, Sep 22, 2008 at 9:59 PM, Jon Palmer <[EMAIL PROTECTED]> wrote: I would appreciate some help combining logical expressions in criteria queries. My toy object model is three classes Order and a subclass SpecialOrder Person each Order has a Person property. I'm trying to do a query for all Orders where the order is of type special order or where the Order.Person is not deleted. I've tried this: DetachedCriteria detached= DetachedCriteria.For(typeof(Person), "p") .Add(Property.ForName("p.IsDeleted").Eq(false)); ICriteria criteria = session.CreateCriteria(typeof (Order)) .Add(Restrictions.Or( Property.ForName("class").Eq(typeof(SpecialOrder)), Property.ForName("Person").Eq(detached) )).List(); but I get a null Reference exception in: "NHibernate.Criterion.SubqueryExpression.InitializeInnerQueryAndParamete rs(ICriteriaQuery criteriaQuery)" Any thoughts on how to get this kind of query right? Thanks Jon P.S. I'm expecting that the sql generated should look something like this: select .... from Orders o, left out join Persons p on o.PersonID = p.ID where o.Class = 'SpecialOrder' or (o.PersonID is not null and p.IsDeleted = 0) -- Ken Egozi. http://www.kenegozi.com/blog http://www.musicglue.com http://www.castleproject.org http://www.gotfriends.co.il -- Ken Egozi. http://www.kenegozi.com/blog http://www.musicglue.com http://www.castleproject.org http://www.gotfriends.co.il --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "nhusers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/nhusers?hl=en -~----------~----~----~----~------~----~------~--~---
