プライマリDBから名前を取得しているセカンダリDBのテーブルにアクセスしようとしています。私の難しさは、 "DB-Name"を二次クエリにパラメータとして渡すことです(私はMyBatisアノテーションベースのマッパーを使用しています)。mybatis - @Oneアノテーションに複数のパラメータを渡す
これは私のマッパー
@SelectProvider(type = DealerQueryBuilder.class, method = "retrieveDealerListQuery")
@Results({
@Result(property="dealerID", column="frm_dealer_master_id"),
@Result(property="dealerTypeID", column="frm_dealer_type_id", [email protected](select="retrieveDealerTypeDAO")),
@Result(property="dealerName", column="frm_dealer_name")
})
public List<Dealer> retrieveDealerListDAO(@Param("firmDBName") String firmDBName);
@Select("SELECT * from ${firmDBName}.frm_dealer_type where frm_dealer_type_id=#{frm_dealer_type_id}")
@Results({
@Result(property="dealerTypeID", column="frm_dealer_type_id"),
@Result(property="dealerType", column="frm_dealer_type")
})
public DealerType retrieveDealerTypeDAO(@Param("firmDBName") String firmDBName, @Param("frm_dealer_type_id") int frm_dealer_type_id);
私は私の "プライマリDB" から取得されていfirmDBNameです。
- 2番目のクエリで$ {firmDBName}を省略すると、クエリはプライマリデータベースにアクセスしようとしていて、テーブル "PrimaryDB.frm_dealer_type"が見つかりません。したがって、基本的には、プライマリDBで "frm_dealer_type"という名前のテーブルを検索しようとしています。
私は
@Result(プロパティ= "dealerTypeID" のような@Resultを再書き込みしようとすると、列= "firmDBName = firmDBName、frm_dealer_type_id = frm_dealer_type_id"、1 =ワン(選択= "retrieveDealerTypeDAO" @ ))、
「firmDBName」列が存在しないというエラーが発生します。
- $ {firmDBName}を#{firmDBName}に変更しても役に立たなかった。
私はこのブログを参照してくださいでした - here
私は解決策が二問合せに私の主なクエリからの私のパラメータfirmDBNameを渡したいです。
ならびにドキュメント上に私が持っているテストケースを参照することができます変数の形のparameter_Nameの値は、 {parameter_Name = _my_variable_}のようになりますか? – Razvi
これはdBテーブルにある必要はなく、sqlproviderによって生成されたselectから返されるだけです。あなたがそのためのJavaコードを提供できるなら、私はそれを修正する方法を示すことができます。テストケースを見ることができない場合、私は自分の答えでリンクし、最初の選択によってどのように戻ってくるかを見るでしょう。 – h3adache
戻り値としてDB名を選択し、戻り列の名前をマッピングするカスタム列名を選択しました。問題は解決しました。ありがとう – Razvi