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 Mon, 09 Jul 2007 17:15:53 GMT
Ok, I don't like it either.

Craig

On Jul 9, 2007, at 9:34 AM, Patrick Linskey wrote:

> Hi,
>
> I think that 2.1.6 makes the behavior relatively clear:
>
> "If the type of the field or property is one of the following, it is
> mapped in the same way as it
> would if it were annotated as Basic:"
>
> That definitely implies that a field with no annotation should be
> mapped as if the Basic annotation were present.
>
> However, I still don't like it.
>
> -Patrick
>
> On 7/9/07, Craig L Russell <Craig.Russell@sun.com> wrote:
>> As I've already said, the spec is pretty opaque. Before assuming that
>> a missing @Basic annotation still has a default fetch=EAGER element,
>> I'd want to see a spec clarification. Clearly there is no TCK test
>> possible for this...
>>
>> Craig
>>
>> On Jul 9, 2007, at 9:17 AM, Kevin Sutter wrote:
>>
>> > :-)  The only reason why I would want to eagerly fetch LOBs is to
>> > satisfy
>> > the intent of the spec.  Since the @Basic annotation is optional
>> > and the
>> > default fetchType is EAGER, then I assert that the spec indicates
>> > that LOBs
>> > need to be fetched EAGERly.  Do you read the spec differently?
>> >
>> > I will agree that "in practice" LOBs should not be fetched
>> > EAGERly.  But, we
>> > need to be consistent with the spec so as not to surprise customers
>> > as they
>> > move from one JPA implementation to another.
>> >
>> > Kevin
>> >
>> > On 7/9/07, Patrick Linskey <plinskey@gmail.com> wrote:
>> >>
>> >> Indeed you do... why would we want to eagerly fetch LOBs? I
>> >> understand
>> >> the logic if @Basic is specified, but not if it is omitted.
>> >>
>> >> -Patrick
>> >>
>> >> On 7/9/07, Kevin Sutter <kwsutter@gmail.com> wrote:
>> >> > I have opened JIRA Issue 281 (
>> >> > https://issues.apache.org/jira/browse/OPENJPA-281) for this
>> >> problem.  It
>> >> > seems that we have agreed that enums should be EAGER by
>> >> default.  I just
>> >> > have to convince everybody that lobs also have to be EAGER, by
>> >> default...
>> >> > :-)
>> >> >
>> >> > Thanks,
>> >> > Kevin
>> >> >
>> >> > On 7/8/07, Kevin Sutter <kwsutter@gmail.com> wrote:
>> >> > >
>> >> > > Craig,
>> >> > > Comments below...
>> >> > >
>> >> > > On 7/7/07, Craig L Russell <Craig.Russell@sun.com> wrote:
>> >> > > >
>> >> > > > 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.
>> >> > >
>> >> > >
>> >> > > Isn't that just standard order of business with these  
>> specs?  :-)
>> >> > >
>> >> > > 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.
>> >> > >
>> >> > >
>> >> > > That's how I read the spec.  The first paragraph of 9.1.18
>> >> indicates
>> >> that
>> >> > > @Basic can be applied to any those types (enums and lob types
>> >> included).
>> >> > > The default fetchType is EAGER.  It also states that @Basic is
>> >> optional.
>> >> > > So, the way I read this is that we should be doing EAGER
>> >> fetching for
>> >> all of
>> >> > > those listed types unless explicitly told to do otherwise via
>> >> the LAZY
>> >> > > fetchType via an @Basic annotation.
>> >> > >
>> >> > > 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.
>> >> > >
>> >> > >
>> >> > > It seems to me that the spec is clear on the use and
>> >> expectations of
>> >> > > @Basic and the default fetchType of EAGER.  Unless there are
>> >> other
>> >> spec
>> >> > > references that contradict the statements in 9.1.18...
>> >> > >
>> >> > > 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!
>> >> > > >
>> >> > > >
>> >> > > >
>> >> > >
>> >> >
>> >>
>> >>
>> >> --
>> >> 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!
>>
>>
>>
>
>
> -- 
> 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!


Mime
View raw message