2011-10-25 9 views
2

myBatis 3では、1つの結果を複数のオブジェクトにマップして、オブジェクトがすべて同じインスタンスを参照できるようにすることは可能ですか?私が参考にできる例はありますか?より詳細な情報を追加するために更新myBatisの結果を複数のオブジェクトにマップする方法は?

:例えば

を、のは、私は私のDBで自分のアプリケーションのためのContact Sに関する情報を保存しましょう。私はそれを言う、との接触の同じインスタンスをマップするためにMyBatisのを使用することが可能かどうかを知りたい、Contactを保持Listingクラス、:

public class Listing { 
    private Contact myContact; 
    //getters & setters... 
} 

だけでなく、また、A成り立つContactsHolderクラスへContact

public class ContactsHolder { 
    private Contact aContact 
    //getters & setters... 
} 

Iは同じインスタンスであることの両方ListingContactsHolderクラスにMyBatisのによりマッピングされたオブジェクトを必要とします。これは可能ですか?

+0

あなたの解決しようとしている問題についての詳細情報はありますか? MyBatis 3の結果マッピングは非常に強力です。 – Andy

+0

@AndyPryor:私は解決しようとしている問題の詳細について私の質問を更新しました。これが私がしようとしていることを明確にするのに役立ちます。ありがとう! – holic87

+0

"Listings"のインスタンスを取得しようとしていますが、 "ContactsHolder"のインスタンスはデータベース呼び出しの1つですか? – Andy

答えて

1

いいえ、MyBatisは標準の結果マッピングでこれを行うことはできません。 (私の知る限り)。 "Contact"オブジェクトを選択してから、ContactとContactHolderを両方とも手動で構築し、Contactを参照することができます。

カスタムResultSetHandlerを実装してください。

これは非常に特殊な要求ですが、そのような2つのオブジェクトにまたがって同じインスタンスを共有したいのはなぜか分かりません。 MyBatis 3にこのような機能が存在しないのはおそらく理由です。

+0

ところで、私はmyBatisプラグインを使ってこの問題を解決できました([ユーザガイド]の17ページ(http://code.google.com/p/mybatis/downloads/detail?name=MyBatis-3-User- Guide.pdf&can = 3&q = Docs))、 'ResultSetHandler'クラスの' handleResultSets'メソッドをインターセプトします。結果セットに含まれる同じ 'Contact'インスタンスを' List'と 'ContactsHolder'クラスの両方に追加することができました。 – holic87

+0

良いアイデア、私は反映するために私の答えを更新します。 – Andy