Albert, thanks for the tip on FetchGroups. I will definitely use it, but it does not solve my use case.
Following is a simplistic use case: --------------------------------------------------------- ENTITIES: @Entity public class X { @Id private String id; private String name; @OneToOne(fetch = FetchType.LAZY) @LoadFetchGroup("idOnly") private Y y; ...setters/getters } @Entity @FetchGroup(name = "idOnly", attributes = {@FetchAttribute(name = "id")}) public class Y { @Id private String id; private String name; @OneToOne(fetch = FetchType.LAZY) private X x; ...setters/getters } --------------------------------------------------------- Vanilla FIND: X x = em.find(X.class, "x1"); x.getY(); triggers: SELECT t0.name, t0.Y_ID FROM X t0 WHERE t0.id = ? [params=?] SELECT t0.name, t0.X_ID FROM Y t0 WHERE t0.id = ? [params=?] --------------------------------------------------------- FetchGroups FIND: OpenJPAEntityManager oem = OpenJPAPersistence.cast(em); X x = oem.find(X.class, "x1"); oem.getFetchPlan().removeFetchGroup("default"); x.getY(); SELECT t0.name, t0.Y_ID FROM X t0 WHERE t0.id = ? [params=?] SELECT t0.id FROM Y t0 WHERE t0.id = ? [params=?] --------------------------------------------------------- What I hoping was to have one SELECT only, the first one, as Y's ID is already there: SELECT t0.name, t0.Y_ID FROM X t0 WHERE t0.id = ? [params=?] --------------------------------------------------------- Thanks. On Thu, Feb 25, 2016 at 9:51 AM, Albert Lee <allee8...@gmail.com> wrote: > Take a look in OpenJPA's FetchGroup construct to see if this meets your > needs. > > > http://openjpa.apache.org/builds/2.4.0/apache-openjpa/docs/manual.html#ref_guide_fetch > > Albert > > On Wed, Feb 24, 2016 at 10:49 PM, Alejandro Abdelnur <tuc...@gmail.com> > wrote: > > > Hello, > > > > I've spent quite a bit of time searching around without any luck. > > > > With OpenJPA 2.x, is it possible to get the foreign key of a OneToOne > > relationship in the source without loading the target entity? > > > > For example: > > > > public class A { > > @Id > > private String id; > > private String name; > > @OneToOne(fetch = FetchType.LAZY) > > private B b; > > ...getters/setters > > } > > > > public class B { > > @Id > > private String id; > > private String name; > > ...getters/setters > > } > > > > Even if 'A a = em.find(A.class, "1")' loads the columns 'ID, NAME, B_ID' > > from A if I do 'a.getB().getId()' this triggers a new query on B to get > ID. > > > > The closest related thing I found is > > > > > http://stackoverflow.com/questions/2593722/hibernate-one-to-one-getid-without-fetching-entire-object > > , but this does not seem to apply to OpenJpa. > > > > Similarly for ManyToOne relationships? > > > > Thanks in advance. > > > > Alejandro > > > > > > -- > Albert Lee. >