... so maybe the clearFetchGroups() is causing the implicit fetching of the primitives in Address to be disabled. What happens if you call resetFetchGroups() before setting things up instead?
-Patrick On 8/13/07, Pinaki Poddar <[EMAIL PROTECTED]> wrote: > > I thought the clear*() operations were to remove any custom > fetchgroups that were added to > the plan, and left default alone. > > clearFetchGroups() clears all the fetch groups. Does the documentation > say otherwise? > > > Pinaki Poddar > 972.834.2865 > > -----Original Message----- > From: Joe Grassel [mailto:[EMAIL PROTECTED] > Sent: Monday, August 13, 2007 4:17 PM > To: [email protected] > Subject: Re: Fetch Groups > > Ok, I commented out all the @FetchGroup annotations, and commented out > the lines that add the fetchgroups to the fetchplan. I still had the > curious behavior that my address 1:1 relationship, now annotated > explicitly as eager, was still not getting loaded, in fact it started > coming up null instead of a proxy object even. > > however, after I commented out these preceding lines (they appear before > adding my fetchgroups to the plan, I probably should have included them > in my code snipper earlier): > > // oem.getFetchPlan().clearFetchGroups(); > // oem.getFetchPlan().clearFields(); > > Then the address relationship started displaying eager behavior. Did > either or both of the clear* operations remove the default fetch group > from the plan? If so, is that the intended function? I thought the > clear*() operations were to remove any custom fetchgroups that were > added to the plan, and left default alone. > > > > > On Monday, August 13, 2007, at 03:36PM, "Patrick Linskey" > <[EMAIL PROTECTED]> wrote: > >What if you remove the fetch group annotations, and just set fetch type > > >to eager on the relation? If that, or that + @Basic, works, then it > >must be a problem with our fetch group traversal application. > > > >-Patrick > > > >On 8/13/07, Joe Grassel <[EMAIL PROTECTED]> wrote: > >> No change: > >> > >> SELECT t0.EMP_TYPE, t1.id, t0.dept_id, t0.description, t0.manager_id > >> FROM Employee t0 LEFT OUTER JOIN Address t1 ON t0.address_id = t1.id > >> WHERE t0.id = ? [params=(int) 1] > >> > >> On Monday, August 13, 2007, at 03:25PM, "Patrick Linskey" > <[EMAIL PROTECTED]> wrote: > >> >Hmm. What happens if you put @Basic annotations on the fields in > Address? > >> > > >> >-Patrick > >> > > >> >On 8/13/07, Joe Grassel <[EMAIL PROTECTED]> wrote: > >> >> Looks like the only query that goes out is: > >> >> > >> >> > >> >> [main] openjpa.jdbc.SQL - <t 16515324, conn 1700554076> executing > >> >> prepstmnt 1983018546 SELECT t0.EMP_TYPE, t1.id, t0.dept_id, > >> >> t0.description, t0.manager_id FROM Employee t0 LEFT OUTER JOIN > >> >> Address t1 ON t0.address_id = t1.id WHERE t0.id = ? [params=(int) > >> >> 1] > >> >> > >> >> > >> >> On Monday, August 13, 2007, at 02:37PM, "Patrick Linskey" > <[EMAIL PROTECTED]> wrote: > >> >> >> Is this a bug in OpenJPA, or is a proxy object supposed to be > in the Address entity's place? > >> >> > > >> >> >I would expect the address data to be available. > >> >> > > >> >> >What SQL is produced by the find call? > >> >> > > >> >> >-Patrick > >> >> > > >> >> >On 8/13/07, Joe Grassel <[EMAIL PROTECTED]> wrote: > >> >> >> Hello, I'm writing a program that is trying to capitalize on > FetchGroups, but I'm hitting some behavior that I was not expecting, > based on what I read from the manual. > >> >> >> > >> >> >> I have two entities, Employee and Address, as follows: > >> >> >> > >> >> >> @Entity > >> >> >> @FetchGroups({ > >> >> >> @FetchGroup(name="DescFetchGroup", attributes= > [EMAIL PROTECTED](name="description")} ), > >> >> >> @FetchGroup(name="AddressFetchGroup", attributes= > >> >> >> [EMAIL PROTECTED](name="address")} ) //... > >> >> >> }) > >> >> >> public class Employee { > >> >> >> @Id > >> >> >> private int id; > >> >> >> > >> >> >> //... > >> >> >> > >> >> >> @Basic(fetch=FetchType.LAZY) > >> >> >> private String description; > >> >> >> > >> >> >> @OneToOne(fetch=FetchType.LAZY) > >> >> >> private Address address; > >> >> >> > >> >> >> //... > >> >> >> > >> >> >> } > >> >> >> > >> >> >> and > >> >> >> > >> >> >> @Entity > >> >> >> public class Address { > >> >> >> @Id > >> >> >> private int id; > >> >> >> > >> >> >> private String street; > >> >> >> private String city; > >> >> >> private String state; > >> >> >> private int zip; > >> >> >> > >> >> >> //... > >> >> >> > >> >> >> public String toString() > >> >> >> { > >> >> >> StringBuffer sb = new StringBuffer(); > >> >> >> sb.append("Address(id=").append(this.id).append(")"); > >> >> >> sb.append(": street=").append(getStreet()); > >> >> >> sb.append(": city=").append(getCity()); > >> >> >> sb.append(": state=").append(getState()); > >> >> >> sb.append(": zip=").append(getZip()); > >> >> >> > >> >> >> return new String(sb); > >> >> >> } > >> >> >> } > >> >> >> > >> >> >> This is what I'm trying to do: > >> >> >> > >> >> >> // ... > >> >> >> OpenJPAEntityManager oem = (OpenJPAEntityManager) em; > >> >> >> oem.getFetchPlan().addFetchGroups("DescFetchGroup"); > >> >> >> oem.getFetchPlan().addFetchGroups("AddressFetchGroup"); > >> >> >> > >> >> >> oem.clear(); > >> >> >> Employee emp = oem.find(Employee.class, 1); oem.clear(); > >> >> >> > >> >> >> if (emp.getDescription() != null) > >> >> >> System.out.println("Employee description=" + > >> >> >> emp.getDescription()); else > >> >> >> System.out.println("Description is null"); > >> >> >> > >> >> >> if (emp.getAddress() != null) > >> >> >> System.out.println("Employee address=" + emp.getAddress()); > >> >> >> else > >> >> >> System.out.println("Address is null"); > >> >> >> > >> >> >> // ... > >> >> >> > >> >> >> I get the following results: > >> >> >> > >> >> >> Employee description=Description 1 Employee > >> >> >> address=Address(id=1): street=null: city=null: state=null: > >> >> >> zip=0 > >> >> >> > >> >> >> It looks like an empty proxy object containing just the Address > entity's primary key is returned. I was under the impression that with > the AddressFetchGroup added to the fetch plan, that the whole (Address) > entity's persistent state would be eagerly loaded. > >> >> >> > >> >> >> Is this a bug in OpenJPA, or is a proxy object supposed to be > in the Address entity's place? > >> >> >> > >> >> > > >> >> > > >> >> >-- > >> >> >Patrick Linskey > >> >> >202 669 5907 > >> >> > > >> >> > > >> >> > >> > > >> > > >> >-- > >> >Patrick Linskey > >> >202 669 5907 > >> > > >> > > >> > > > > > >-- > >Patrick Linskey > >202 669 5907 > > > > > > 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. > -- Patrick Linskey 202 669 5907
