emacarron / mybatis

Automatically exported from code.google.com/p/mybatis
0 stars 0 forks source link

Collections mapping doesn't respect scope of collection #168

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
What version of the MyBatis are you using?
3.0.2

Please describe the problem.  Unit tests are best!

Can't map result correctly with inner collections
That's probably because current collections mapping doesn't respect scope if 
the collection

I have following classes: 

public class Resource {
    private String name;
    private List<PrincipalPermissions> permissions = new ArrayList<PrincipalPermissions>();
    // getters/setters/constructors
}

public class PrincipalPermissions {
    private String principalName;
    private List<String> permissions = new ArrayList<String>();
    // getters/setters/constructors
}

And mybatis mapping: 

    <resultMap id="resource" type="Resource">
        <id property="name" column="resourceName"/>
        <collection property="permissions" resultMap="principalPermissions"/>
    </resultMap>

    <resultMap id="principalPermissions" type="PrincipalPermissions">
        <id property="principalName" column="principalName"/>
        <collection property="permissions" ofType="string">
            <result property="permission" column="permission"/>
        </collection>
    </resultMap>

Returned resultSet is the following

resourceName, principalName, permission

resource1, user1, read
resource1, user1, create
resource2, user1, delete
resource2, user1, update

What is the expected output? What do you see instead?

I expect to get 

ArrayList(Resource (resourceName='resource1', permissions = 
             ArrayList(PrincipalPermissions(principalName='user1', permissions = ArrayList('read', 'create'))),
          Resource (resourceName='resource2', permissions = 
             ArrayList(PrincipalPermissions(principalName='user1', permissions = ArrayList('delete', 'update')))

Instead I get

ArrayList(Resource (resourceName='resource1', permissions = 
             ArrayList(PrincipalPermissions(principalName='user1', permissions = ArrayList('read', 'create', 'delete', 'update'))),
          Resource (resourceName='resource2', permissions = 
             ArrayList(PrincipalPermissions(principalName='user1', permissions = ArrayList('read', 'create', 'delete', 'update')))

permissions which belong to resource2 are brought to resource1 and vise versa

Please provide any additional information below.

It worked in mybatis 2.3.5

with the following mapping 

    <resultMap id="resource" class="Resource" groupBy="name">
        <result property="name" column="resourceName"/>
        <result property="permissions" resultMap="principalPermissions"/>
    </resultMap>

    <resultMap id="principalPermissions" class="PrincipalPermissions"
               groupBy="principalName">
        <result property="principalName" column="principalName"/>
        <result property="permissions" resultMap="permissionString"/>
    </resultMap>

    <resultMap id="permissionString" class="string">
        <result property="fake" column="permission"/>
    </resultMap>

Original issue reported on code.google.com by joz...@gmail.com on 8 Nov 2010 at 3:30

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
Issue 263 has been merged into this issue.

Original comment by eduardo.macarron on 5 Feb 2012 at 2:25

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
Failing test committed in r4661

Original comment by eduardo.macarron on 5 Feb 2012 at 2:50

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
Hope this is fixed in r4662. Please try with latest snapshot
http://code.google.com/p/mybatis/downloads/list?can=3&q=Product%3DMyBatis

Original comment by eduardo.macarron on 5 Feb 2012 at 4:08

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
Issue 380 has been merged into this issue.

Original comment by eduardo.macarron on 5 Feb 2012 at 6:31