Re: Get the number of FKs

From: Robert Zeigler (robert..uregumption.com)
Date: Thu Mar 06 2008 - 15:54:56 EST

  • Next message: Scott Anderson: "RE: Get the number of FKs"

    Just about like that? :)
    String sql =
       "SELECT DISTINCT #result('department.idx' 'Integer' 'idx') FROM
    department LEFT JOIN user ON department.idx = user.department_idx
    WHERE user.idx IS NULL";
    SQLTemplate template = new SQLTemplate(Department.class,sql);
    List departments =
    DataContext.getThreadDataContext().performQuery(template);

    should do the trick.

    Robert
    On Mar 6, 2008, at 3/62:50 PM , Scott Anderson wrote:

    > How would I build a SQLTemplate to do a query like this one?
    >
    > SELECT DISTINCT department.idx
    > FROM department
    > LEFT JOIN user ON department.idx = user.department_idx
    > WHERE user.idx IS NULL
    >
    > -----Original Message-----
    > From: Michael Gentry [mailto:blacknex..mail.com]
    > Sent: Thursday, March 06, 2008 3:34 PM
    > To: use..ayenne.apache.org
    > Subject: Re: Get the number of FKs
    >
    > You are right. I completely misread that. I'd still probably do raw
    > SQL or an SQLTemplate, though.
    >
    > Thanks,
    >
    > /dev/mrg
    >
    > On Thu, Mar 6, 2008 at 3:31 PM, Mike Kienenberger <mkienen..mail.com>
    > wrote:
    >> Michael, just to clarify, he doesn't want to work with Employees. He
    >
    >> wants to work with Departments. Scott wants to know how to do this
    >> without pulling in the Employee records.
    >>
    >>
    >>
    >> On 3/6/08, Michael Gentry <blacknex..mail.com> wrote:
    >>> If it is mandatory, it sounds like these records were created
    >> outside > of Cayenne (they are legacy, testing, etc records)? If
    >> that is the > case, the easiest thing to do is to just issue an SQL
    >> command directly > to the database (using whatever normal SQL
    > command you use).
    >>> Something like:
    >>>
    >>> delete from employee where departmentFK is null; > > If it is
    >> something that is happening regularly, though, and you want > to be
    >> able to nuke them from within your Cayenne application, you can >
    >> issue raw SQL to do the trick, too:
    >>>
    >>> DataContext dataContext = DataContext.createDataContext(); >
    >> SQLTemplate sqlQuery = new SQLTemplate(Customer.class, "delete
    >> from >
    >
    >> employee where departmentFK is null"); >
    >> dataContext.performNonSelectingQuery(sqlQuery);
    >>>
    >>> With this code, though, be careful that you don't have any of
    >> those > dangling employees in memory, as this totally bypasses the
    >> Cayenne > object graph.
    >>>
    >>> /dev/mrg
    >>>
    >>>
    >>>
    >>> On Thu, Mar 6, 2008 at 3:19 PM, Scott Anderson
    > <sanderso..irvana.com> wrote:
    >>>> Employee.Department is mandatory; I want to search for and
    >> delete rogue > > departments.
    >>>>
    >>>>
    >>>>
    >>>> -----Original Message-----
    >>>> From: Michael Gentry [mailto:blacknex..mail.com] > > Sent:
    >> Thursday, March 06, 2008 2:08 PM > > To:
    >> use..ayenne.apache.org >
    >
    >>> Subject: Re: Get the number of FKs > > > > It seems you mainly
    >
    >> want a list of employees who are not in a > > department, so doing
    >> a fetch on Employee where "department = null"
    >>>> might work (I'm not positive I've ever tried this, but it seems
    >
    >> logical > > to me).
    >>>>
    >>>> /dev/mrg
    >>>>
    >>>> On Thu, Mar 6, 2008 at 1:58 PM, 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:55:30 EST