openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Patrick Linskey" <plins...@bea.com>
Subject RE: possible to write a JPA Query to that filters both an Entity and its relationship entities?
Date Fri, 23 Feb 2007 15:56:53 GMT
It is, but it doesn't buy you much in this situation -- the oldTimers
collection in your example won't be filtered to just the ones that are
old. It'll be all the employees in the dept.

-Patrick

-- 
Patrick Linskey
BEA Systems, Inc. 

_______________________________________________________________________
Notice:  This email message, together with any attachments, may contain
information  of  BEA Systems,  Inc.,  its subsidiaries  and  affiliated
entities,  that may be confidential,  proprietary,  copyrighted  and/or
legally privileged, and is intended solely for the use of the individual
or entity named in this message. If you are not the intended recipient,
and have received this message in error, please immediately return this
by email and then delete it. 

> -----Original Message-----
> From: Dain Sundstrom [mailto:dain@iq80.com] 
> Sent: Friday, February 23, 2007 7:21 AM
> To: open-jpa-dev@incubator.apache.org
> Subject: Re: possible to write a JPA Query to that filters 
> both an Entity and its relationship entities?
> 
> Is it now legal to select multiple items using EJBQL?  I haven't  
> looked at the 3.0 syntax much.
> 
> -dain
> 
> On Feb 22, 2007, at 4:54 PM, Craig L Russell wrote:
> 
> > How about
> >
> > select dept, oldtimers from Department dept LEFT JOIN  
> > dept.employeeCollection oldtimers WHERE dept.deptno >= 100 AND   
> > oldtimers.yearsOfService >= 15
> >
> > That should give you only departments that satisfy the deptno  
> > constraint and since you are not using outer join, only 
> departments  
> > that also have at least one employee satisfying the yearsOfService  
> > constraint.
> >
> > The results would have one element for each employee. Each result  
> > row would contain the department and the employee. So you would  
> > have the results:
> > [looks better in monospace font]
> > dept            oldtimers
> > =============   ==============
> > R&D             Larry
> > R&D             Curly
> > R&D             Moe
> > Entertainment   Fred
> > Entertainment   Ginger
> >
> > Craig
> >
> > On Feb 22, 2007, at 12:21 PM, Tom Mutdosch wrote:
> >
> >> Hi there,
> >> I have a question about JPA Queries containing 
> relationships and a  
> >> WHERE filter.  I basically want to have a JSF page containing a  
> >> datatable that shows a list of Departments - each Department row  
> >> shows relevant columns (department name, ID, etc) as well as a  
> >> nested list of that Department's Employees with 15 or more years  
> >> of service.
> >> I was wondering if there was any way to create a JPA query that  
> >> would return me such a result using just a single query.  From  
> >> what I have heard, I don't believe this is possible but thought  
> >> I'd ask here just to be sure.  As far as I know, JPA will just  
> >> return me the Departments that match that query and each  
> >> Department will contain every Employee that belongs to it.
> >>
> >> Background: I have a DEPARTMENT entity with a one-to-many  
> >> relationship to an EMPLOYEE entity.  On my web page, I want to  
> >> display "departments with a department number >= 100 and  
> >> containing EMPLOYEES with more than 15 years of service".
> >>
> >> Using SDOs I was able to write a query that would return a 
> List of  
> >> results which I would then bind to my JSF datatable.  This list  
> >> would contain Departments, and the Departments would have the  
> >> Employees that matched that criteria.  To do something similar in  
> >> JPA, I think I now need to do n + 1 queries.  That is, one query  
> >> to retrieve the departments that I want to display, and then for  
> >> each department another query to get the filtered list of its  
> >> Employees.
> >> In summary, I basically want to do something like:
> >> select d from Department d LEFT JOIN d.employeeCollection e WHERE  
> >> d.deptno >= 100 AND  e.yearsOfService >= 15
> >>
> >> But I think I need to do two separate queries.  One to get the  
> >> departments:
> >> select d from Department d WHERE d.deptno >= 100
> >>
> >> Then for each Department returned in that result set, a separate  
> >> query to get the employees I'm after:
> >> select e from Employee e where e.department.deptno = d.deptno and
> >> e.yearsOfService >= 15
> >>
> >>
> >> Does this sound like the right/only way to do this?
> >> Thanks,
> >> Tom
> >>
> >>
> >>
> >>
> >
> > Craig Russell
> > Architect, Sun Java Enterprise System 
> http://java.sun.com/products/jdo
> > 408 276-5638 mailto:Craig.Russell@sun.com
> > P.S. A good JDO? O, Gasp!
> >
> 
> 

Mime
View raw message