2012-11-25 113 views
2

我試圖映射創建將填充vehicleVO的結果地圖。我想將幾列映射到vehicleDocuments HashMap。我將要填充的數據也存在於同一個表中。Mybatis結果地圖將值映射到模型的哈希映射字段

public class VehicleVO implements Serializable { 
    public String vehicleId; 
    public String vehicleNumber; 
    public String model; 
    public Map<String, Date> vehicleDocuments; 
    public TransportVO transport; 
    public String distanceTraveled; 

} 

我想使用下面的xml進行映射。但它似乎並不奏效。我一個gettign這個錯誤

「元素類型的內容 「結果」 必須匹配 「(構造函數?,ID *,結果*,聯想*,收集*,鑑別?)」。

<resultMap id="BaseResultMap" type="com.svms.service.vo.VehicleVO"> 
     <id column="vehicle_id" jdbcType="BIGINT" property="vehicleId" /> 
     <result column="vehicle_no" jdbcType="VARCHAR" property="vehicleNumber" /> 
     <result column="Model" jdbcType="VARCHAR" property="model" /> 
     <association property="vehicleDocuments" javaType="java.util.HashMap"> 
      <result column="FC" jdbcType="DATE" property="FC_TD" /> 
      <result column="TAX" jdbcType="DATE" property="TAX_TD" /> 
      <result column="Insureance" jdbcType="DATE" property="INSURANCE_TD" /> 
      <result column="Form47" jdbcType="DATE" property="FORM47_TD" /> 
      <result column="NC" jdbcType="DATE" property="NC_TD" /> 
     </association> 
     <result column="total_distance" jdbcType="INTEGER" property="distanceTraveled" /> 
     <result column="transport_id" jdbcType="BIGINT" property="transportId" /> 
</resultMap> 

如果我的理解是正確的,試圖映射到一個HashMap中,也可視爲關聯映射。但是,這是一個一對一的映射而已。我也使用映射<collection>標籤試過。不過我得到的相同的錯誤

回答

1

不幸的是,你需要實現一個ResultHandler來構建一個HashMap。

另外,您提到的DTD錯誤是因爲結果元素必須位於關聯元素之前。

+1

@devdanke - 我不同意。儘管這是真的,但引用的錯誤消息是DTD驗證錯誤,問題的要點是「我想將少量列映射到vehicleDocuments HashMap」,這需要使用ResultHandler完成,至少在2012年完成。 – Andy

16

'resultMap'下元素的順序應該按照DTD的規定進行維護。將所有「結果」標籤移至「關聯」標籤之前。

+0

是..我已經做到了,它的工作! – om39a