ibatis-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "David Marzo (JIRA)" <ibatis-...@incubator.apache.org>
Subject [jira] Commented: (IBATISNET-105) Lazy load support for Strong typed collections and single Items
Date Thu, 15 Sep 2005 17:36:54 GMT
    [ http://issues.apache.org/jira/browse/IBATISNET-105?page=comments#action_12329454 ] 

David Marzo commented on IBATISNET-105:

 Sorry for the latence of my response "hard week" :-)

I updload rev04.zip with diff files created with tortoise SVN, the last old archives can be

I create 2 new class in a new namespace IBatisNet.DataMapper.LazyLoad

       This class is responsable to create lazy load proxies, it used in the
       MappedStatement class to create lazy proxies. Also resolve the type of the property
to proxified
       based on resultClass and return listClass, see GetTypeReturnedByStatemet().
       (I dont test if work in the scenario that you specify only listClass).

TODO: I think its usefull if the interceptor could be specified in a SqlMap.config file
and let user personalize the resolution of lazy load using a custom interceptor, of course
              if none is specified use default.

       TODO: I think the lazy load must perform in the same IDalSession or at least let the
user decide
if it open a new session or not but in Mapped statement I get a null session and cant call
             Build(IDalSession ...)

   SimpleInterceptor: A simple implementation of an interceptro to resolve lazy load, heavy
equal to

Also i Modified ReflectionInfo.cs because http://support.castleproject.org/jira//browse/DYNPROXY-8,
i Think is a bug in DynamicProxy library, but i have
no much knowledge in reflection.

Current Issues:

   Bug: http://support.castleproject.org/jira/browse/DYNPROXY-7 Resolved in SVN an in the
next version

   Limitation of DynamicProxies:
     For proxies of class only intercept virtual methods because of you must declare in collections
     method Count, GetEnumerator, RemoveAt .. as virutal, also its applicable for class that
is lazy load

"Problem" in lazy load 1:1 Relationship:

Scenario: Factory(Manage 0..1)<-- -->(Boss 1)Worker

tables: WORKERS(pk,name) FACTORIES(pk,fk_boss,name)


<resultMap id="rmWorkerAll" class="Worker" >
<result property="Id" dbType="Guid" column="pk" />
<result property="Manage" dbType="Guid" column="pk" lazyLoad="true"
                                select="Factory.LoadAllByWorkerIdForBoss" />
<result property="Name" dbType="VarWChar" column="nombre"/>

<resultMap id="rmFactoryAll" class="Factory" >
<result property="Id" dbType="Guid" column="pk" />
<result property="Boss" dbType="Guid" column="fk_boss" lazyLoad="true"
<result property="Nombre" dbType="VarWChar" column="nombre"/>

No problem the Boss property is null if the factory have no boss and also i could optimize
          interceptor no resolving the lazy load for property Factory.Boss.Id


Problems :-), for exaple:

if (worker.Manage != null)
worker.Mangage.ManufactureCar(); //ArgumentNullException
//if worker no manage a factory worker.Manage is not null because it have a proxy
// but when resolve worker.Manage is null

       This issue only appear in 1:1 relationships and when navigate from the entity that
have no
       foreingkey in his table

maybe override != == operator ? its work for null ?
no use lazy load in this case ?
other ? 

> Lazy load support for Strong typed collections and single Items
> ---------------------------------------------------------------
>          Key: IBATISNET-105
>          URL: http://issues.apache.org/jira/browse/IBATISNET-105
>      Project: iBatis for .NET
>         Type: New Feature
>   Components: DataMapper, Testing
>     Reporter: David Marzo
>  Attachments: LazyLoad.zip, LazyLoad_rev.zip, LazyLoad_rev03.zip, LazyLoad_rev04.zip
> Nowadays Ibatis only support lazy load for no typed (IList) collections and can not lazy
load relationship of 0 or 1.
> Changes:
> - In IBatisNet.DataMapper.Test.NUnit.SqlMapTests.ResultMapTest .TestLazyWithStronglyTypedCollectionMapping()
> exist one test  that end ok but its outdated and it should fail.
>            - BatisNet.DataMapper.Test.Domain.Order 
>                  Ln 22:
>                         Original:
>                               private IList _lineItems;//LineItemCollection
>                        Correct:
>                             private LineItemCollection _lineItems;
>                       Ln: 50
>                             Original:
>                                  public IList LineItems
>                              Correct:
>                                  public LineItemCollection LineItems
>                                  {...}
>                    In the statment order-with-lines-collection add to LazyLoad = "true"
>                   <resultMap id="order-with-lines-collection" class="Order" extends="lite-order-result-by-name"
>                               <result property="LineItems" column="Order_ID"  select="GetLineItemsForOrderWithListClass"
>                  </resultMap>
> -TODO add test for 0...1 relationship , ej Worker.Boss 
> Attached its the files changed to implement  "beta" this feature

This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators:
For more information on JIRA, see:

View raw message