The sql, SELECT t1.id, t1.uuid FROM TimeDependentAccountData t0 INNER JOIN Account t1 ON t0.account_id = t1.id WHERE t0.id = ?, is generated because the TimeDependentAccountData tries to populate its eager Account field. This sql will not be generated if this field is lazy.
- Fay --- On Thu, 5/1/08, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote: > From: [EMAIL PROTECTED] <[EMAIL PROTECTED]> > Subject: Re: Tons of unneeded queries > To: [email protected] > Cc: [email protected] > Date: Thursday, May 1, 2008, 9:36 AM > It seems to me that he should put the lazy on the > one-to-many relation and > not the many-to-one relation. > > F > > > > > > Fay Wang > > <[EMAIL PROTECTED] > > > > To > > [email protected] > > cc > 05/01/2008 08:41 > > AM > Subject > Re: Tons of unneeded > queries > > > Please respond to > > [EMAIL PROTECTED] > > e.org > > > > > > > > > > Hi Nick, > The unneeded queries can be removed if you specify lazy > relationship > with Account in your TimeDependentAccountData entity as > shown below: > > @Entity > public class TimeDependentAccountData { > @Id > @GeneratedValue(strategy=GenerationType.IDENTITY) > private int id; > > @ManyToOne( > cascade = {CascadeType.PERSIST}, > fetch = FetchType.LAZY, <====== change from > EAGER to LAZY > optional = false > ) > private Account account; > > - Fay > > --- On Wed, 4/30/08, Nikolas Everett > <[EMAIL PROTECTED]> wrote: > From: Nikolas Everett <[EMAIL PROTECTED]> > Subject: Tons of unneeded queries > To: [email protected] > Date: Wednesday, April 30, 2008, 8:00 AM > > I'm having a problem where one of my dependent objects > is fetching the > object it is dependent on, even though that dependent > object has already > fetched. > > > I am using OpenJpa 1.0.2 backed into Postgres 8.2.6. I > have two objects: > Account and TimeDependentAccountData. > > > @Entity > @Table([EMAIL PROTECTED](columnNames="uuid")}) > public class Account { > @Id > @GeneratedValue(strategy=GenerationType.IDENTITY) > private int id; > > @OneToMany(cascade={CascadeType.PERSIST, > CascadeType.REFRESH, > CascadeType.MERGE}, fetch=FetchType.EAGER, > mappedBy="account") > @OrderBy("startTime ASC") > private List<TimeDependentAccountData> > timeDependentAccountData; > > ...getters and setters... > } > > > Entity > public class TimeDependentAccountData { > @Id > @GeneratedValue(strategy=GenerationType.IDENTITY) > private int id; > > @ManyToOne(cascade = {CascadeType.PERSIST}, fetch = > FetchType.EAGER, > optional = false) > private Account account; > > ...getters and setters... > } > > When I do something like em.createQuery("SELECT a FROM > Account") > OpenJPA > runs the following SQL queries: > 2785 SELECT t0.id, t0.uuid FROM Account t0 > 2797 SELECT t0.id, t1.id, t1.field1, t1.field2, t1.field3, > t1.field4 FROM > Account t0 INNER JOIN TimeDependentAccountData t1 ON t0.id > = t1.account_id > ORDER BY t0.id ASC, t1.startTime ASC > 115796 SELECT t1.id, t1.uuid FROM TimeDependentAccountData > t0 INNER JOIN > Account t1 ON t0.account_id = t1.id WHERE t0.id = ? > [params=(int) 1 > 115799 SELECT t1.id, t1.uuid FROM TimeDependentAccountData > t0 INNER JOIN > Account t1 ON t0.account_id = t1.id WHERE t0.id = ? > [params=(int) 2 > 115800 SELECT t1.id, t1.uuid FROM TimeDependentAccountData > t0 INNER JOIN > Account t1 ON t0.account_id = t1.id WHERE t0.id = ? > [params=(int) 3 > 115802 SELECT t1.id, t1.uuid FROM TimeDependentAccountData > t0 INNER JOIN > Account t1 ON t0.account_id = t1.id WHERE t0.id = ? > [params=(int) 4 > 115804 SELECT t1.id, t1.uuid FROM TimeDependentAccountData > t0 INNER JOIN > Account t1 ON t0.account_id = t1.id WHERE t0.id = ? > [params=(int) 5 > 115805 SELECT t1.id, t1.uuid FROM TimeDependentAccountData > t0 INNER JOIN > Account t1 ON t0.account_id = t1.id WHERE t0.id = ? > [params=(int) 6 > 115807 SELECT t1.id, t1.uuid FROM TimeDependentAccountData > t0 INNER JOIN > Account t1 ON t0.account_id = t1.id WHERE t0.id = ? > [params=(int) 7 > 115808 SELECT t1.id, t1.uuid FROM TimeDependentAccountData > t0 INNER JOIN > Account t1 ON t0.account_id = t1.id WHERE t0.id = ? > [params=(int) 8 > 115810 SELECT t1.id, t1.uuid FROM TimeDependentAccountData > t0 INNER JOIN > Account t1 ON t0.account_id = t1.id WHERE t0.id = ? > [params=(int) 9 > 115811 SELECT t1.id, t1.uuid FROM TimeDependentAccountData > t0 INNER JOIN > Account t1 ON t0.account_id = t1.id WHERE t0.id = ? > [params=(int) 10 > 115813 SELECT t1.id, t1.uuid FROM TimeDependentAccountData > t0 INNER JOIN > Account t1 ON t0.account_id = t1.id WHERE t0.id = ? > [params=(int) 11 > 115814 SELECT t1.id, t1.uuid FROM TimeDependentAccountData > t0 INNER JOIN > Account t1 ON t0.account_id = t1.id WHERE t0.id = ? > [params=(int) 12 > 115816 SELECT t1.id, t1.uuid FROM TimeDependentAccountData > t0 INNER JOIN > Account t1 ON t0.account_id = t1.id WHERE t0.id = ? > [params=(int) 13 > 115817 SELECT t1.id, t1.uuid FROM TimeDependentAccountData > t0 INNER JOIN > Account t1 ON t0.account_id = t1.id WHERE t0.id = ? > [params=(int) 14 > 115819 SELECT t1.id, t1.uuid FROM TimeDependentAccountData > t0 INNER JOIN > Account t1 ON t0.account_id = t1.id WHERE t0.id = ? > [params=(int) 15 > 115821 SELECT t1.id, t1.uuid FROM TimeDependentAccountData > t0 INNER JOIN > Account t1 ON t0.account_id = t1.id WHERE t0.id = ? > [params=(int) 16 > 115822 SELECT t1.id, t1.uuid FROM TimeDependentAccountData > t0 INNER JOIN > Account t1 ON t0.account_id = t1.id WHERE t0.id = ? > [params=(int) 17 > 115824 SELECT t1.id, t1.uuid FROM TimeDependentAccountData > t0 INNER JOIN > Account t1 ON t0.account_id = t1.id WHERE t0.id = ? > [params=(int) 18 > 115825 SELECT t1.id, t1.uuid FROM TimeDependentAccountData > t0 INNER JOIN > Account t1 ON t0.account_id = t1.id WHERE t0.id = ? > [params=(int) 19 > 115827 SELECT t1.id, t1.uuid FROM TimeDependentAccountData > t0 INNER JOIN > Account t1 ON t0.account_id = t1.id WHERE t0.id = ? > [params=(int) 20 > 115828 SELECT t1.id, t1.uuid FROM TimeDependentAccountData > t0 INNER JOIN > Account t1 ON t0.account_id = t1.id WHERE t0.id = ? > [params=(int) 21 > 115830 SELECT t1.id, t1.uuid FROM TimeDependentAccountData > t0 INNER JOIN > Account t1 ON t0.account_id = t1.id WHERE t0.id = ? > [params=(int) 22 > 115831 SELECT t1.id, t1.uuid FROM TimeDependentAccountData > t0 INNER JOIN > Account t1 ON t0.account_id = t1.id WHERE t0.id = ? > [params=(int) 23 > 115833 SELECT t1.id, t1.uuid FROM TimeDependentAccountData > t0 INNER JOIN > Account t1 ON t0.account_id = t1.id WHERE t0.id = ? > [params=(int) 24 > 115835 SELECT t1.id, t1.uuid FROM TimeDependentAccountData > t0 INNER JOIN > Account t1 ON t0.account_id = t1.id WHERE t0.id = ? > [params=(int) 25 > 115836 SELECT t1.id, t1.uuid FROM TimeDependentAccountData > t0 INNER JOIN > Account t1 ON t0.account_id = t1.id WHERE t0.id = ? > [params=(int) 26 > And another 400 or so of these. > > What can I do to prevent this silliness? > > Thanks, > > --Nik > > > > ____________________________________________________________________________________ > > Be a better friend, newshound, and > know-it-all with Yahoo! Mobile. Try it now. > http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ ____________________________________________________________________________________ Be a better friend, newshound, and know-it-all with Yahoo! Mobile. Try it now. http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ
