2017-01-03 5 views
0

나는 다음과 같은 테이블이 : 나는 그의 모든 친구들과 사용자를 선택합니다의 MyBatis 컬렉션 속성

CREATE TABLE users (
    id VARCHAR (255) NOT NULL, 
    name VARCHAR (255) NOT NULL, 
    create_date TIMESTAMP NOT NULL, 
    email VARCHAR (255) NOT NULL, 
    password VARCHAR (255) NOT NULL, 
    last_visit TIMESTAMP, 
    avatar_id VARCHAR (255) 
); 

CREATE TABLE user_friends (
    user_id VARCHAR (255) NOT NULL, 
    friend_id VARCHAR (255) NOT NULL 
); 

CREATE TABLE file (
    id VARCHAR (255) NOT NULL, 
    file_path VARCHAR (255) NOT NULL, 
    create_date TIMESTAMP NOT NULL, 
    user_id VARCHAR (255) NOT NULL 
); 

를, 그래서 내가 선택 실행하려고했습니다

<sql id="coreUserAttributes"> 
     users.id, 
     users.name, 
     users.last_visit as lastVisit 
</sql> 

<select id="getUser" resultMap="UserRM"> 
    SELECT 
    <include refid="coreUserAttributes"/>, 
    f.id as friendId, 
    f.name as friendName 
    FROM users 
    LEFT JOIN user_friends ON users.id = user_friends.user_id 
    LEFT JOIN users f ON f.id = user_friends.friend_id 
    <where> 
     users.id = #{id} 
    </where> 
</select> 

매퍼를 만들었어요 - 그건 어떤 문제없이 일해. 내가 <collection> 태그없이 된 resultMap을 삽입하면 문제가 된 resultMap

에 모든 것이 잘 작동하고 매퍼 내 사용자 개체

<resultMap id="UserRM" type="User"> 
    <id column="id"/> 
</resultMap> 

반환하지만 <collection> 태그

<resultMap id="UserRM" type="User"> 
    <id column="id"/> 
    <collection property="friends" ofType="User" javaType="ArrayList"> 
     <id column="friendId"/> 
     <result column="friendName" property="name"/> 
    </collection> 
</resultMap> 

를 삽입 할 때 매퍼 호출의 결과는 null입니다. 콘솔에 오류가 표시되지 않습니다. 친구들과 함께 사용자를로드하려면 어떻게해야합니까?

P.S 또한, 흥미로운 무엇인지, 내가 로그

2017-01-03 22:29:19 DEBUG u.s.network.query.UserMapper.getUser - ==> Preparing: SELECT users.id, users.name, users.last_visit as lastVisit , f.id as friendId, f.name as friendName FROM users LEFT JOIN user_friends ON users.id = user_friends.user_id LEFT JOIN users f ON f.id = user_friends.friend_id WHERE users.id = ? 
2017-01-03 22:29:19 DEBUG u.s.network.query.UserMapper.getUser - ==> Preparing: SELECT users.id, users.name, users.last_visit as lastVisit , f.id as friendId, f.name as friendName FROM users LEFT JOIN user_friends ON users.id = user_friends.user_id LEFT JOIN users f ON f.id = user_friends.friend_id WHERE users.id = ? 
2017-01-03 22:29:19 DEBUG u.s.network.query.UserMapper.getUser - ==> Parameters: 1(String) 
2017-01-03 22:29:19 DEBUG u.s.network.query.UserMapper.getUser - ==> Parameters: 1(String) 
2017-01-03 22:29:19 DEBUG u.s.network.query.UserMapper.getUser - <==  Total: 1 
2017-01-03 22:29:19 DEBUG u.s.network.query.UserMapper.getUser - <==  Total: 1 

MyBatis로 개체를 빌드 할 때 지금까지 내가 이해, 선택의 작품 일반적으로하지만, 일부 문제는 장소가있다

에 다음 텍스트를 참조하십시오.

답변

0

해결책은 아주 간단합니다 :이 컬럼에 별칭을 추가 한 당신의 클래스에 매핑 할 적어도 하나 개의 속성이 있으면 모든 것이

<sql id="coreUserAttributes"> 
     users.id AS id, 
     users.name AS name, 
     users.last_visit as lastVisit 
</sql> 

또한 일을 잘 시작되지 - 결과는 null가됩니다 값