[jboss-user] [Persistence, JBoss/CMP, Hibernate, Database] - parentheses not enforcing evaluation order.

awclemen do-not-reply at jboss.com
Wed Jun 13 17:03:19 EDT 2007


Greetings Forum Folks,

I'm attempting to do some EJB QL on Jboss 4.0.4 compiled for ejb3 and I've run into a problem.  The query I am attempting is the following:


  |             Query query = entityManager.createQuery("FROM ProjectEstimate AS pe WHERE 
  | ((pe.subStartDate IS NOT NULL and pe.subEndDate IS NULL and :date >= pe.subStartDate) 
  | or (pe.subEndDate IS NOT NULL and pe.subStartDate IS NULL and :date <= pe.subEndDate) 
  | or (pe.subStartDate IS NOT NULL and pe.subEndDate IS NOT NULL and :date >= pe.subStartDate and :date <= pe.subEndDate)) 
  | ORDER BY pe.name ");
  | query.setParameter("date", new java.util.Date());
  | 

However, when this runs, the where clause of the sql is:


  | WHERE (pe.subStartDate IS NOT NULL) and (pe.subEndDate IS NULL) and (:date >= pe.subStartDate) 
  | or (pe.subEndDate IS NOT NULL) and (pe.subStartDate IS NULL) and (:date <= pe.subEndDate) 
  | or (pe.subStartDate IS NOT NULL) and (pe.subEndDate IS NOT NULL) and (:date >= pe.subStartDate and :date <= pe.subEndDate)
  | 

We all know that those two where clauses don't return the same data.  Reading the J2EE tutorial on sun, it states the following:

anonymous wrote : A WHERE clause consists of a conditional expression, which is evaluated from left to right within a precedence level. 
  | You can change the order of evaluation by using parentheses.

So, theoretically, it should process my query, with the parentheses intact.  But it is not.  What am I doing wrong?  or is there another way of doing this?

Thanks,
Andy


View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4054127#4054127

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4054127



More information about the jboss-user mailing list