2012-08-29 56 views
0

我正在使用Dozer轉換我的對象。但我有一個問題來映射一個簡單的列表... 我從Hibernate檢索ResultSet作爲Object List,我想將它映射到我的複雜類型對象。如何使用Dozer將簡單的ArrayList映射到VO

所以,我的來源是這樣的:

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屬性,但我沒有找到...

感謝您的幫助!

回答

0

出於某種原因,推土機支持這一(理想情況):

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

它只會映射到nameList的整個字符串表示,所以你name屬性將結束與值[姓名,地址]

你最好的選擇是把你的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類只包含在holded領域的List實例,並提供訪問其與getter方法。

在字段映射is-accessible="true"是必需的,因爲MyClass屬性是public並且沒有訪問者。我建議你製作這些屬性private並創建存取方法。

+0

好吧,我也嘗試過使用你的第一個解決方案,但沒有成功:(正如你所說,這個屬性被值[Name,Address]填滿了。對於你最後的解決方案,我認爲它不是性感的。不喜歡無用地包裝一個對象,但我對你很好,這是最好的選擇!當然,在這個例子中,屬性名稱和地址是公開的,但它僅用於這個例子: )。謝謝你。有關信息,我決定使用Map而不是List,這很容易與「這個」符號一起使用。 – Ryu