2015-07-04 40 views
3

當使用MyBatis時,在返回另一個對象內的對象列表時遇到問題。我的主要目標是這樣的:使用MyBatis返回對象內部對象的列表

private Long id; 

private String symbol; 

private List<TypePermission> typePermissions; 

和我的映射器看起來像這樣

<resultMap type="CalendarType" id="calendarTypeMap"> 
    <result column="id" property="id"/> 
    <result column="symbol" property="symbol"/> 
    <collection property="TypePermissions" resultMap="TypePermissions"/> 
</resultMap> 

<resultMap id="TypePermissions" type="TypePermission"> 
    <result property="roleId" column="roleId"/> 
    <result property="permissionSymbol" column="permissionSymbol"/> 
</resultMap> 

我的目標是得到這樣的對象:當我執行SQL查詢

content:[ 
    "id":id, 
    "symbol":symbol, 
    "TypePermissions":{ 
     "roleId":roleId, 
     "permissionSymbol":permissionSymbol 
    } 
] 

我得到以下錯誤cannot find symbol TypePermissions,因爲主要SELECT嘗試選擇行,例如TYPEPERMISSIONS,ID,SYMBOL

我在網上搜索,但沒有找到有用的東西。你能幫我指出我做錯了什麼嗎?

回答

6

請發表您的選擇片段,我認爲這將確定:

<select id="selectCalendarType" parameterType="int" resultMap="calendarTypeMap"> 
    SELECT c.id, 
    c.symbol 
    t.roleId, 
    t.permissionSymbol 
    FROM CalendarType c 
    LEFT JOIN TypePermission t ON c.id = t.c_id 
    WHERE c.id = #{id} 
</select> 

而且我認爲你將得到的是actully這樣的:

content:{ 
    "id":id, 
    "symbol":symbol, 
    "TypePermissions":[{ 
    "roleId":roleId, 
    "permissionSymbol":permissionSymbol 
    }] 
} 

,更多的是這個你可以閱讀這個例子Nested_Results_for_Collection

+0

我會試一試 –

+0

我想我需要練習SQL更多...謝謝你的答案 –