2017-02-09 3 views
2

メンバー表:
のid int型
名varchar型MyBatisの多対多のベストプラクティス

クラブテーブル:
のid int型
名varchar型

メンバーとクラブインデックステーブル:
MEMBER_ID int
club_id int
register_dateタイムスタンプ

クラブでIDで会員に質問し、各クラブの登録時間にPOJOをどのように設定する必要がありますか?メンバーとクラブの参照を含むエンティティにインデックステーブルをマップする必要がありますか?練習?あなたは両方の方法でデータを得ることができるように

class Member { 
Integer id; 
String name; 
List<ClubRegistration> clubRegistrations; 
} 
class Club { 
Integer id; 
String name; 
List<MemberRegistration> memberRegistrations; 
} 
class ClubRegistration { 
    Club club; 
    Date date; 
} 
class MemberRegistration { 
    Member member; 
    Date date; 
} 

:そのメンバーとそのクラブやクラブとメンバーここ

答えて

1

は、私がお勧めオブジェクトモデルです。

SQLクエリ:あなたが求める場合の

SELECT m.id AS memberId, m.name AS memberName, c.id AS clubId, c.name AS clubName, register_Date 
FROM member m 
INNER JOIN member_club mc ON m.id=mc.member_id 
INNER JOIN club c ON mc.club_id=c.id 
WHERE {what you want} 

このresultMap:

<resultMap id="memberRM" type="Member"> 
    <id column="memberId" property="id"/> 
    <result column="memberName" property="name"/> 
    <collection property="clubRegistrations" ofType="ClubRegistration"> 
    <result column="register_Date" property="date" /> 
    <association property="club" javaType="Club"> 
     <id column="clubId" property="id"/> 
     <result column="clubName" property="name"/> 
    </association> 
    </collection> 
</resultMap> 

はただ、他のケースのためのメンバー/クラブを入れ替えます。

あなたは、その後も、巣の代わりにこのresultMapを参照する必要が定義:<association property="club" resultMap="clubRM" />私はそれを自分でチェックしていませんでしたが、

the circular reference issue that would arise is managed bay Mybatis

+0

Woww ..あなたのソリューションは素晴らしいと思います。本当にありがとうございます。 –

+0

ちょっと更新しました。それがうまくいくかどうか私に知らせてください。 – blackwizard

関連する問題