ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tom Duffey <tduf...@utilivisor.com>
Subject Re: lazy loading confusion
Date Wed, 27 Sep 2006 16:39:40 GMT

On Sep 27, 2006, at 11:26 AM, Poitras Christian wrote:

> 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?

I don't think so:

public class User extends BaseObject implements java.io.Serializable,  
Cloneable
{
	...
}

and in Project the association that I'm testing is just:

public class Project extends BaseObject implements java.io.Serializable
{
	...
	private User[] justForTesting = new User[0];
	public User[] getJustForTesting() { return this.justForTesting; }
	public void setJustForTesting(User[] justForTesting)  
{ this.justForTesting = justForTesting; }
}

Also I have another lazily-loaded association defined with a single  
User rather than an array of them which is working fine.

Tom

>
> From: Tom Duffey [mailto:tduffey@utilivisor.com]
> Sent: Wednesday, 27 September 2006 12:17
> To: user-java@ibatis.apache.org
> Subject: Re: lazy loading confusion
>
>
> 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
>
>>
>> From: Tom Duffey [mailto:tduffey@utilivisor.com]
>> Sent: Wednesday, 27 September 2006 11:36
>> To: user-java@ibatis.apache.org
>> Subject: Re: lazy loading confusion
>>
>>
>> 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 <tduffey@utilivisor.com> 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: tduffey@utilivisor.com]
>>>> > Sent: Wednesday, 27 September 2006 10:34
>>>> > To: user-java@ibatis.apache.org
>>>> > 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: tduffey@utilivisor.com]
>>>> >> Sent: Wednesday, 27 September 2006 09:25
>>>> >> To: user-java@ibatis.apache.org
>>>> >> 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:tduffey@utilivisor.com]
>>>> >>> Sent: woensdag 27 september 2006 7:34
>>>> >>> To: user-java@ibatis.apache.org
>>>> >>> 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
>>>> >>
>>>> >>
>>>> >
>>>> >
>>>>
>>>>
>>>
>>
>


Mime
View raw message