ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Poitras Christian" <Christian.Poit...@ircm.qc.ca>
Subject RE: lazy loading confusion
Date Wed, 27 Sep 2006 16:26:08 GMT
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
 

________________________________

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