Unfortunately, that doesn't produce SQL with the proper JOIN type:
SELECT DISTINCT t0.idx, t0.manager_idx, t0.name FROM department t0, user
t1 WHERE t0.idx = t1.department_idx AND (t1.idx IS NULL)
In a one-to-many (one department, many users) relationship, this query
doesn't make any sense, so perhaps this could be added as a feature
request to Cayenne.
I also tried matching against an empty list; that simply produced a
ClassCastException, since Cayenne was expecting an Integer.
-----Original Message-----
From: Mike Kienenberger [mailto:mkienen..mail.com]
Sent: Thursday, March 06, 2008 3:29 PM
To: use..ayenne.apache.org
Subject: Re: Get the number of FKs
I haven't tried it, but I would think that if anything were going to
work out of the box, it would be
expression =
ExpressionFactory.matchExp(Department.EMPLOYEE_LIST_RELATIONSHIP_PROPERT
Y,
null);
Department.EMPLOYEE_LIST_RELATIONSHIP_PROPERTY may be named differently
in your generated classes -- it'd be equal to "employees", most likely.
Unfortunately, I don't know if you can do a null comparision against a
to-many relationship.
If not, I suspect your next best bet is to create an SQLTemplate.
I wouldn't bother with the intermediate step of fetching how many
employees are in the list -- I'd simply pull back all departments that
have no employees since you're planning on deleting them anyway, or at
least department primary keys.
On 3/6/08, Scott Anderson <sanderso..irvana.com> wrote:
> I've got a one-to-many relationship (employees belong to a
> department), and I'd like to search for departments that have no
employees.
> Currently, I have something like:
>
> foreach(dept : departments) {
> if(dept.getEmployees().size() == 0)
> context.deleteObject(dept);
> }
>
> When I do this, it has the effect of telling Cayenne to fetch data
> rows for every employee in the database; this will not scale well. Is
> there any way I can get the size of the array without doing a custom
> SELECT query?
>
This archive was generated by hypermail 2.0.0 : Thu Mar 06 2008 - 15:43:28 EST