I agree (being the owner of OPENJPA-281)...  I have a patch almost ready for
this, but I've found a few edge cases that still need to resolved...

Kevin

On 7/24/07, Craig L Russell <[EMAIL PROTECTED]> wrote:

This sounds a lot like https://issues.apache.org/jira/browse/OPENJPA-281

Craig

On Jul 24, 2007, at 1:27 PM, Christian Defoy wrote:

> Oups! I forgot to include it:
>
> public enum ShapeTypes
> {
>    CIRCLE,
>    SQUARE,
>    TRIANGLE,
>    RECTANGLE;
> }
>
>
> On 7/24/07, Patrick Linskey <[EMAIL PROTECTED]> wrote:
>> > Playing around a bit with those classes, I found that if I mark
>> > attribute Shape.type as EAGER, both techniques produce only one
>> select
>> > statement...
>>
>> And ShapeTypes is an enum?
>>
>> -Patrick
>>
>> On 7/24/07, Christian Defoy <[EMAIL PROTECTED]> wrote:
>> > Hi Patrick,
>> >
>> > I have two classes.  I stripped the accessors and mutators to
>> shrink
>> > them a bit (I am unsure if attachments get stripped or not).
>> >
>> > @Entity
>> > @Table(name="SHAPE")
>> > public class Shape
>> > {
>> >     @Column(name="shape_id")
>> >     @Id
>> >     @GeneratedValue(strategy=GenerationType.IDENTITY)
>> >     private int id;
>> >
>> >     @Column( name="type_id" )
>> >     private ShapeTypes type;
>> >
>> >     @OneToOne( mappedBy="parent", cascade=CascadeType.ALL,
>> > fetch=FetchType.EAGER )
>> >     private Attachment attachment;
>> > }
>> >
>> > @Entity
>> > @Table( name="attach" )
>> > public class Attachment
>> > {
>> >     @Id
>> >     @GeneratedValue( strategy=GenerationType.IDENTITY )
>> >     @Column( name="attach_id" )
>> >     private int id;
>> >
>> >     @OneToOne( cascade=CascadeType.ALL, fetch=FetchType.LAZY )
>> >     @Column( name="shape_id" )
>> >     private Shape parent;
>> >
>> >     private String value;
>> > }
>> >
>> > When I use the find() method, I see the following selects:
>> >
>> > SELECT t0.SHAPE_ID FROM SHAPE t0 WHERE t0.SHAPE_ID = ? [params=
>> (int) 16]
>> > SELECT t0.ATTACH_ID, t0.SHAPE_ID, t0.VALUE FROM ATTACH t0 WHERE
>> > t0.SHAPE_ID = ? [params=(int) 16]
>> >
>> > When I use a JPQL query, I get the following select:
>> >
>> > SELECT t0.SHAPE_ID, t1.ATTACH_ID, t1.SHAPE_ID, t1.VALUE FROM
>> SHAPE t0
>> > LEFT OUTER JOIN ATTACH t1 ON t0.SHAPE_ID = t1.SHAPE_ID WHERE
>> > (t0.SHAPE_ID = ?) [params=(int) 16]
>> >
>> > Playing around a bit with those classes, I found that if I mark
>> > attribute Shape.type as EAGER, both techniques produce only one
>> select
>> > statement...
>> >
>> > Thanks,
>> >
>> > Christian
>> >
>> >
>> > On 7/24/07, Patrick Linskey <[EMAIL PROTECTED]> wrote:
>> > > Can you post the selects that you're seeing and the domain model?
>> > >
>> > > Thanks,
>> > >
>> > > -Patrick
>> > >
>> > > On 7/24/07, Christian Defoy <[EMAIL PROTECTED]> wrote:
>> > > > Hello,
>> > > >
>> > > > I just noticed that if I call entityManager.find() to
>> retrieve an
>> > > > object, many select statements (one per relation) are
>> generated even
>> > > > though the relations are marked as FetchType.EAGER.
>> > > >
>> > > > If I use a JPQL query instead, only one select statement is
>> generated.
>> > > >  The JPQL looks like this: "SELECT s FROM Shape s WHERE s.id
>> = :id"
>> > > >
>> > > > Is that normal? Is there some configuration property that I
>> can change?
>> > > >
>> > > > Thanks in advance!
>> > > >
>> > > > Christian
>> > > >
>> > >
>> > >
>> > > --
>> > > Patrick Linskey
>> > > 202 669 5907
>> > >
>> >
>>
>>
>> --
>> Patrick Linskey
>> 202 669 5907
>>

Craig Russell
Architect, Sun Java Enterprise System http://java.sun.com/products/jdo
408 276-5638 mailto:[EMAIL PROTECTED]
P.S. A good JDO? O, Gasp!



Reply via email to