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?