|
I'm quite sure that User[] is final and cannot be lazy
loaded.
But I am surprised that List doesn't
work.
Is your User class final?
Christian
On Sep 27, 2006, at 11:09 AM, Poitras Christian wrote:
What is the type of your
"members" property.
Remember that final objects cannot be lazy
loaded.
If you are using a final object in your "members"
property, iBATIS will definetly load it even in lazy
mode.
I tried User[] (User is one of my
classes) and List.
Tom
On Sep 27, 2006, at 10:00 AM, Tom Duffey wrote:
On Sep 27, 2006, at 9:51 AM, Jeff Butler wrote:
Try explicitly enabling lazy loading:
<settings enhancementEnabled="true"
lazyLoadingEnabled="true"/>
It seems to
me I remember some others reporting that it had to be specifically enabled
(even though it is supposed to be enabled by default). Maybe we have
a bug?
Using those settings results in
the same thing. I should mention that I have other lazily-loaded
properties that iBATIS is handling properly. I'm going to try removing
Spring and see if it makes any difference.
Well I'm stumped. I pulled
out Spring and the problem is still happening. Is there any way for me
to get more debugging information from iBATIS about why it thinks it needs to
load the association?
Tom
On 9/27/06, Tom
Duffey <[EMAIL PROTECTED]>
wrote:
On
Sep 27, 2006, at 9:40 AM, Poitras Christian wrote:
> Try to
turn on enhancement (also add needed jar) for lazy loading and >
see what happens.
Same thing. I'm using CGLIB 2.1
which was the oldest version I could find on their
site.
Tom
> -----Original Message----- > From:
Tom Duffey [mailto:
[EMAIL PROTECTED]] > Sent: Wednesday, 27 September 2006
10:34 > To: [email protected] >
Subject: Re: lazy loading confusion > > > On Sep 27,
2006, at 9:28 AM, Poitras Christian wrote: > >> Maybe
your application is accessing the "members" property when
the >> object is populating. >> >> Try to
turn on logging and see what happens. Add a log statement in
>> your "members" property getter to be sure. > >
Did this. The getter is never called, only the
setter. This > application is using Spring 1.x for some
AOP logging, could it be > manipulating some bytecode somehow to
make iBATIS think it needs to > load > the
data? > > Tom > >> >>
Christian >> >> -----Original Message----- >>
From: Tom Duffey [mailto: [EMAIL PROTECTED]] >>
Sent: Wednesday, 27 September 2006 09:25 >> To: [email protected] >>
Subject: Re: lazy loading confusion >> >> >>
On Sep 27, 2006, at 1:41 AM, Niels Beekman
wrote: >> >>> Can we see your
config? >> >> What all would you like to
see? It's a large application and the >> example I
posted is just a snippet. Here's more from my sql
config >> and dao config: >> >>
<sqlMapConfig> >> <properties
resource="org/projectFoundry/config/ >>
jdbc.properties"/> >> >> <settings
enhancementEnabled="true"/> >> >> <transactionManager
type="JDBC"> >> <dataSource type="SIMPLE">
>> <property
name="JDBC.Driver"
value="${JDBC.Driver}"/> >> <property
name="JDBC.ConnectionURL" value="$ >> {JDBC.ConnectionURL
}"/> >> <property
name="JDBC.Username" value="$ >>
{JDBC.Username}"/> >> <property
name="JDBC.Password" value="$ >>
{JDBC.Password}"/> >> </dataSource> >> </transactionManager> >> >> <sqlMap
resource="org/projectFoundry/persistence/project/ >>
ProjectSqlMap.xml"/> >> <sqlMap
resource="org/projectFoundry/persistence/user/ >>
UserSqlMap.xml"/> >> etc. >>
</sqlMapConfig> >> >> <daoConfig>
>> <context> >> >> <transactionManager
type="SQLMAP"> >> <property
name="SqlMapConfigResource" value="org/ >>
projectFoundry/config/sql-
map.xml"/> >> </transactionManager> >> >> <dao >>
interface="org.projectFoundry.persistence.project.ProjectDao" >>
implementation="
org.projectFoundry.persistence.project.ProjectSqlMapD >>
a >> o" >> >>
/> >> <dao
interface="org.projectFoundry.persistence.user.UserDao" >>
implementation="
org.projectFoundry.persistence.user.UserSqlMapDao"/> >> etc. >> </context> >>
</daoConfig> >> >>
Tom >> >>> >>> -----Original
Message----- >>> From: Tom Duffey [mailto:[EMAIL PROTECTED]] >>>
Sent: woensdag 27 september 2006 7:34 >>> To: [email protected] >>>
Subject: lazy loading confusion >>> >>> Hi
All, >>> >>> I have a Project class with a list
of Members. It is my >>> understanding
>> >>> that I can turn on lazy loading in my sql
map config, define a >>> Project >> >>>
result map like: >>> >>>
<resultMap id="result" class="
foo.Project"> >>> <result
property="projectId"
column="id"/> >>> <result
property="members" column="id" >>> select="
Member.listByProject"/> >>> </resultMap> >>> >>>
and then retrieve a project and the members will not be
retrieved >>> unless I call getMembers() on the project
instance. Is this how >>>
it's > >>> supposed to work? What I'm
finding is that the members list is >>> populated even if I
do not call getMembers(). To back this idea I >>>
renamed the property in the result map to "members2" and added a new
>>> members2 attribute to the project class (To make sure I
didn't miss >>> any calls to getMembers) and sure enough it
is still populated >>> when I > >>>
retrieve the project. >>> >>> What
gives? I thought the point of lazy loading was to not
load >>> data > >>> unless I ask for
it. I'm using iBATIS 2.1.7 for
Java. >>> >>> Best Regards,
>>> >>> Tom
Duffey >> >> > >
|