2013-04-24 69 views
0

我不得不顯示一對多映射使用SQL中的MyBatis

Tasks: 
id 
title 
Description 

Task_reply_mapping 
task_id 
parent_id 

我寫了下面的查詢來獲取數據

select t1.id,t1.title,t1.description,t2.id,t2.title,t2.description 
from tasks t1 
left join Task_reply_mapping trm on t1.id = trm.task_id 
    left join tasks t2 on t2.id = t1.id 
    order by fe.created_at desc limit 0,10 

這似乎是工作的罰款,但它不是填充表數據正確。我想知道這個查詢是否正確?

在我的映射文件我有

<resultMap id="TaskResultMap" type="com.mycom.myproj.bean.TaskBean"> 
    <id column="id" jdbcType="BIGINT" property="id" /> 
    <result column="title" jdbcType="VARCHAR" property="title" /> 
    <result column="description" jdbcType="VARCHAR" property="description" /> 
    <collection ofType="com.mycom.myproj.bean.TaskBean" property="replyTask"> 
    <id column="id" jdbcType="BIGINT" property="id" /> 
     <result column="title" jdbcType="VARCHAR" property="title" /> 
     <result column="description" jdbcType="VARCHAR" property="description" /> 
    </collection> 
    </resultMap> 

還是我做錯事的映射類。

對象中的記錄就像第一個索引一樣,放置最新的任務,無論是回覆還是新任務等等。

應該插入記錄這樣

Task1 
    --1st reply task 
    --2nd reply task 
    Task 2 
     --1st reply task 
     --2nd reply task 

請讓我知道,如果需要更多的信息。

+0

什麼是t2.id = t1.id'上的「left join task t2」? – 2013-04-24 13:50:38

+0

嗨,萊納斯,我試圖讓自我加入獲取數據的答覆任務,但我認爲這不是自我加入的方式 – user965884 2013-04-24 13:53:55

回答

1

第二屆join必須與Task_reply_mapping表:

select t1.id, 
     t1.title, 
     t1.description, 
     t2.id, 
     t2.title, 
     t2.description 
    from tasks t1 
     left join Task_reply_mapping trm 
      on t1.id = trm.task_id 
     left join tasks t2 
      on t2.id = trm.parent_id 

Here is a demo.

+0

嗨萊納斯,這似乎是正確的,但它不映射數據正確與映射類。你知道它爲什麼嗎? – user965884 2013-04-24 14:49:48

1

不知道問題出在哪裏。

我想也許查詢和映射不正確。

試試這個:

select 
    t1.id 
    ,t1.title 
    ,t1.description 
    ,t2.id as id_2 
    ,t2.title as title_2 
    ,t2.description as description_2 
from tasks t1 
    left join Task_reply_mapping trm on t1.id = trm.task_id 
    left join tasks t2 on t2.id = t1.id 
order by fe.created_at desc limit 0,10 

映射

<resultMap id="TaskResultMap" type="com.mycom.myproj.bean.TaskBean"> 
    <id column="id" jdbcType="BIGINT" property="id" /> 
    <result column="title" jdbcType="VARCHAR" property="title" /> 
    <result column="description" jdbcType="VARCHAR" property="description" /> 
    <collection ofType="com.mycom.myproj.bean.TaskBean" property="replyTask"> 
    <id column="id_2" jdbcType="BIGINT" property="id" /> 
     <result column="title_2" jdbcType="VARCHAR" property="title" /> 
     <result column="description_2" jdbcType="VARCHAR" property="description" /> 
    </collection> 
</resultMap> 

在您查詢,您必須id,二'title and two description`所以這個問題可能是在那裏。