openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kevin Sutter (JIRA)" <>
Subject [jira] Commented: (OPENJPA-281) EAGER not the default fetch type without the @Basic annotation
Date Sun, 05 Aug 2007 23:49:29 GMT


Kevin Sutter commented on OPENJPA-281:

I just committed the changes posted in my patch from last week.  No additional comments were
received, so I am taking that as general agreement.

Just a bit more historical background on these changes in case we have to revisit this in
the future.  My first thought on making Eager work for Enums was to introduce a new ENUM type
code in org.apache.openjpa.meta.JavaTypes.  Although this change started off simple and elegant,
it quickly rippled to many more changes through out the code that really didn't add any value.
 So, I decided to just test for Enums in FieldMetaData instead.  This change was isolated
and didn't have the ripple effect.

On the chance that we need more specialized processing for the Enum type, then we might have
to revert to my original thought.  But, for this immediate problem, a new type code seemed
like overkill.


> EAGER not the default fetch type without the @Basic annotation
> --------------------------------------------------------------
>                 Key: OPENJPA-281
>                 URL:
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: jpa
>    Affects Versions: 0.9.7
>            Reporter: Kevin Sutter
>            Assignee: Kevin Sutter
>             Fix For: 1.0.0
>         Attachments: openjpa-281.patch
> There's an on-going discussion on the dev mailing list concerning this problem (
 Since I've gotten agreement on at least one aspect of the problem, I decided to open this
JIRA Issue to document the problem.
> Here's a summary of the problem:
> 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
>     private Gender gender;
> The JPA spec attempts to address this situation in section 9.1.18...  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?
> We're still working on the agreement...  :-)
> Thanks,
> Kevin

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message