0

我正在使用 Dozer 转换我的对象。但是我在映射一个简单的列表时遇到了问题......我ResultSetHibernate一个中检索一个Object List,我想将它映射到我的复杂类型对象。

所以,我的来源是这样的:

List < Object > list = new ArrayList< Object > ();
list.add("Name");
list.add("Address");

我的价值对象是:

public class MyClass 
{ 
    public String name; 
    public String address; 
}

我只想映射list[0]==>MyClass.namelist[1]==>MyClass.address属性,但我不知道如何...

谢谢你的帮助 !

4

1 回答 1

0

出于某种原因,Dozer支持这一点(理想情况):

<mapping>
    <class-a>MyClass</class-a>
    <class-b>java.util.List</class-b>       
    <field>          
        <a is-accessible="true">name</a>
        <b>this[0]</b>
    </field>        
</mapping>

它只会映射到name的整个字符串表示形式List,因此您的name属性最终会得到值[Name, Address]

您最好的选择是将您List放入一个持有者类并像这样映射它:

<mapping>
    <class-a>MyClass</class-a>
    <class-b>MyHolder</class-b>     
    <field>          
        <a is-accessible="true">name</a>
        <b>holded[0]</b>
    </field>
    <field>          
        <a is-accessible="true">address</a>
        <b>holded[1]</b>
    </field>    
</mapping>

MyHolder类只List在字段中包含您的实例,holded并使用 getter 方法提供对它的访问。

在字段中映射is-accessible="true"是必需的,因为MyClass属性是public并且没有访问器。我建议您创建这些属性private并创建访问器方法。

于 2012-08-29T16:55:20.240 回答