2012-05-11 11 views
1

Mybatisのユーザーマニュアルを結果マップセクションでテストしようとしています。 MyBatisのバージョン:MyBatisの-3.1.0Mybatisネストされたアソシエーション/コレクションの選択が機能しない

<setting name="lazyLoadingEnabled" value="false" /> 


<resultMap id="blogMap" type="blog"> 
<constructor> 
    <idArg column="id" javaType="_long" /> 
    <arg column="title" javaType="String" /> 
</constructor> 
<association property="author" javaType="author" column = "author_id"   select = "getAuthor"/> 
</resultMap> 

<select id="getBlog" parameterType="Long" resultMap="blogMap"> 
    select 
    b.id, 
    b.title 
    from 
    blog b 
    where b.id = #{id} 
</select> 

<select id="getAuthor" parameterType="Long" resultType="author"> 
    select 
    a.id , 
    a.username, 
    a.password 
    from author a 
where a.id = #{id} 
</select> 

私のJavaクラス:

public class Blog { 
private long id; 
private String title; 

private Author author; 
private List<Post> posts; 
     //getter, setters and the constructor 

public class Author { 
private long id; 
private String username; 
private String password; 
private String email; 
private String bio; 
private String favouriteSection; 

最後に、私のテストモジュール

BlogMapperInterface bm = context.getBean("blogMapper",BlogMapperInterface.class); 
    Blog b = bm.getBlog(1); 

デバッグスタックトレース

[10/05/12 06:45:19:019 SGT] DEBUG datasource.DataSourceUtils: Fetching JDBC Connection from DataSource 
[10/05/12 06:45:19:019 SGT] DEBUG BlogMapperInterface.getBlog: ooo Using Connection  [jdbc:oracle:thin:@*, UserName=*, Oracle JDBC driver] 
[10/05/12 06:45:19:019 SGT] DEBUG BlogMapperInterface.getBlog: ==> Preparing: select b.id, b.title from blog b where b.id = ? 
[10/05/12 06:45:19:019 SGT] DEBUG BlogMapperInterface.getBlog: ==> Parameters: 1(Long) 
[10/05/12 06:45:19:019 SGT] DEBUG BlogMapperInterface.getBlog: <== Columns: ID, TITLE 
[10/05/12 06:45:19:019 SGT] DEBUG BlogMapperInterface.getBlog: <==  Row: 1, first blog 
[10/05/12 06:45:19:019 SGT] DEBUG datasource.DataSourceUtils: Returning JDBC Connection to DataSource 

getAuthorが呼び出されないのはなぜですか? getBlog()を呼び出すたびに呼び出されるべきではありませんか?

答えて

1

getBlogから得られた結果にauthor_id列がないためです。

試してみてください。

select 
    b.id, 
    b.title, 
    b.author_id 
    from 
    blog b 
    where b.id = #{id} 
関連する問題