openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Craig L Russell <Craig.Russ...@Sun.COM>
Subject Re: Eager fetching not working with enums and lobs
Date Sat, 07 Jul 2007 22:27:59 GMT
Hi Kevin,

If you can figure out what the spec (9.1.18 and 9.1.19) sez, my hat's  
off to you. What a mudbake this is.

Part of the issue is the annotation definition. If @Basic is  
specified, and the user doesn't explicitly override the fetch type,  
it appears to our annotation processor as if the user specified  
EAGER. Even if @Basic is used with @Lob, if lazy is wanted, it has to  
be explicitly stated.

Maybe we should discuss @Lob in more detail. It isn't obvious to me  
that @Basic can always be used and we might have an option to choose  
a better default for the fetch behavior if @Basic annotation is omitted.

Craig

On Jul 6, 2007, at 11:37 AM, Kevin Sutter wrote:

> I guess the spec is a bit clearer on this than I first thought.   
> Section
> 9.1.8 of the JPA spec indicates that @Basic is optional and applies  
> to the
> following types:
>
> "..Java primitive types, wrappers of the primitive types,  
> java.lang.String,
> java.math.BigInteger,
> java.math.BigDecimal, java.util.Date, java.util.Calendar,  
> java.sql.Date,
> java.sql.Time, java.sql.Timestamp, byte[], Byte[], char[], Character 
> [],
> enums, and any other type that implements Serializable."
>
> And, since the default fetch type for @Basic is EAGER, it looks  
> like we need
> to do eager fetching for both @Enumerated and @Lob fields unless  
> otherwise
> overridden by a LAZY fetch type (ie. @Basic(fetch=LAZY)).  Agree?
>
> Kevin
>
> On 7/6/07, Craig L Russell <Craig.Russell@sun.com> wrote:
>>
>>
>> On Jul 6, 2007, at 10:52 AM, Patrick Linskey wrote:
>>
>> > The spec doesn't seem to discuss it, but I think that lazy is a  
>> pretty
>> > good default behavior for @Lob field types -- typically @Lob things
>> > are big, so you often don't want them in the default fetch graph.
>>
>> Enum is different, though. Enum should be eager fetching by default.
>>
>> Lazy fetching is optional, so we can decide what we want to do. It
>> seems that the existence of @Basic should not change our strategy.
>> And we should default to lazy fetching for Lob and eager fetching for
>> Enum.
>>
>> Craig
>> >
>> > -Patrick
>> >
>> > On 7/6/07, Kevin Sutter <kwsutter@gmail.com> wrote:
>> >> I am finding that the supposed default action of Eager fetching is
>> >> not
>> >> happening with @Enumerated and @Lob fields.  If I explicitly
>> >> specify the
>> >> @Basic annotation, then the fields are eagerly fetched.  But,
>> >> without this
>> >> extraneous @Basic, these fields are lazily loaded.  This action
>> >> does not
>> >> seem to be consistent with the spec.  Nor, can I find any mention
>> >> of this
>> >> alternate behavior in our OpenJPA manual.  Sounds like a bug to
>> >> me.  Any
>> >> other insights?
>> >>
>> >> This works (eager loading kicks in):
>> >>
>> >>     @Basic @Enumerated(EnumType.STRING)
>> >>     private Gender gender;
>> >>
>> >> This does not work (lazy loading kicks in):
>> >>
>> >>     @Enumerated(EnumType.STRING)
>> >>     private Gender gender;
>> >>
>> >> I have also tried to use defaults (without any annotations),  
>> and lazy
>> >> loading still kicks in:
>> >>
>> >>     private Gender gender;
>> >>
>> >> Thanks,
>> >> Kevin
>> >>
>> >
>> >
>> > --
>> > Patrick Linskey
>> > 202 669 5907
>>
>> Craig Russell
>> Architect, Sun Java Enterprise System http://java.sun.com/products/ 
>> jdo
>> 408 276-5638 mailto:Craig.Russell@sun.com
>> P.S. A good JDO? O, Gasp!
>>
>>
>>

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


Mime
View raw message