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.
>

Reply via email to