2011-01-25 15 views
3

MyBatis for Javaのマッピングに問題があり、助けていただければ幸いです。私のクラスの構造は以下の通りです:MyBatisのマッピング構成

//Getters/setters omitted for clarity 

class Foo 
{ 
    int id; 
    Bar bar; 
} 

class Bar { 
    String x; 
    int y; 
} 

私のテーブルはこのようになります - すなわちそれは、クラス構造体から非正規化されています。

create table foo_bar (
    id int, 
    x varchar, 
    y int 
); 

私の使用するinsert文は、(bar.x、bar.y)パラメータを使用して非正規化することができます。

<insert id="insert" parameterType="foo"> 
    <![CDATA[ 
    insert into foo_bar 
    (id, x, y) values 
    (#{x}, #{bar.x}, #{bar.y}) 
    ]]> 
</insert> 

ので、問題は:私は私の選択を実行すると

、私はバーへの参照を持っているのFooのインスタンスであることを結果のオブジェクトをしたいと思います。

これは1つの列で動作するため、タイプ・ハンドラを使用することはできませんし、 'Bar'は外部からデータベースに明示的に表されていないため、重要な関係。

誰も私にこのような推奨方法を教えてもらえますか?

ありがとうございます!

答えて

2

ibatis sqlmapでresultMap定義を使用しようとしましたか?

<resultMap id="foobar-result" class="Foo"> 
    <result property="id" column="id"/> 
    <result property="bar.x" column="x"/> 
    <result property="bar.y" column="y"/> 
</resultMap> 

、その後、あなたの中にちょうどこのresultMapを参照するSQL:

<select id="getFooBar" resultMap="foobar-result"> 
+0

んMyBatisのは、フーのバーの参照がnullでないか、また、新しいバーを作成するためにはFooのコンストラクタを必要とするようにしてください? – AngerClown

関連する問題