Clinton,

I have a working example that I can email to you if you're interested. Can I email it? Here's a clearer explanation of what Niels and I are experiencing:

I have two classes: A which holds an instance of B. I have enhanced lazy loading turned on and I query for A with B being lazily loaded. The inner callback object which proxies B has a "loaded" boolean property (I mistakenly called this "initialized" in the previous email) which indicates whether the inner object has been truly loaded or needs to execute the query.

If B calls any internal methods in the constructor, which may be expected due to data initialization, then "loaded" is immediately marked as "true" and the query never executes.

Paul

Niels Beekman wrote:
We had exactly the same issue, calling a method from within the
constructor triggers "lazy" loading, which obviously isn't very lazy
anymore.

We ended up adding enhancer.setInterceptDuringConstruction(false) where
an Enhancer-object is constructed (2 times in EnhancedLazyResultLoader).

This could however cause problems when you are accessing uninitialized
variables (not loaded from DB), but we're fine with that.

HTH,

Niels

-----Original Message-----
From: Paul Benedict [mailto:[EMAIL PROTECTED] On Behalf Of
Paul Benedict
Sent: dinsdag 23 januari 2007 5:05
To: User Ibatis
Subject: Odd behavior with CGLIB

Can someone tell me if this is a bug in iBATIS:

I turned on lazy loading of a class. In the constructor of the object, I

called a protected method to initialize some properties. Example:

public MyClassConstructor() {
   setId(-1);
}

Because I called a method, iBATIS marked this class has "loaded" but it was never really loaded. Only by replacing setId(-1) with this.id = -1; was I able to prevent the "loaded" variable from being immediately set.

I believe there is some sort of sequencing error here. The class should not be considered initialized until after the constructor returns.
Thoughts?

Paul


Reply via email to