2011-07-19 7 views
0

どのようにして、互いに参照する2つのテーブルの行をマップできますか? たとえば、EmployeeテーブルとDepartmentテーブルがあります。従業員には従業員の部門である部門モデルへの参照があり、部門には部門のマネージャである従業員モデルへの参照があります。だから私はどのように私は春のRowMapperを使用してマップの行を行うことができます。Spring Jdbcマッピング行

おかげで、

+0

'RowMapper'はテーブルではなく結果セットで動作します。正しいSQLを記述し、フラット結果セットを任意の方法でマップする必要があります。 – skaffman

答えて

1

どのように私はお互いを指し、二つのテーブルの列をマッピングすることができますか?このような例

:私はあなたが特定のSQLの詳細(テーブル、リレーション、など)を使用して新しい質問を作成お勧めしますし、SQLをタグ付け、それがより多くのを見つける必要がありますSQLの一部のための

public class TwoTablesRowMapper implements RowMapper<Map<String, Object>> { 

    /** 
    * Map data from select over 2 tables e.g.: 
    * 
    * select 
    * A.foo as afoo, 
    * B.bar as bbar 
    * from PARENT A, 
    *  CHILD B 
    * where A.ID = B.ID 
    * 
    * 
    * @param rs 
    * @param rowNum 
    * @return 
    * @throws SQLException 
    */ 
    public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException { 
     Map<String, Object> resultMap = new HashMap<String, Object>(); 

     // instead of a map one could fill an object 
     // e.g.: myObject.set.afoo(afoo) 
     resultMap.put("afoo", rs.getString("afoo")); 
     resultMap.put("bbar", rs.getString("bbar")); 

     return resultMap; 
    } 
} 

( SQL Serverに精通している)視聴者

+0

これは、関係があまり複雑でない小さなドメインオブジェクトに適用できます。しかし、実際には、すべてのモデルクラスに独自のマッパークラスが必要です。例:EmployeeモデルにはDepartmentへの参照があり、ドメインモデルにデータを入力しているときは、部門IDに基づいて参照されたDepartmentインスタンスのDepartment Mapperクラスを要求するEmployeeクラスが必要です。そしてその逆も同様です。これは、私がEJBのようなORMツールから得た機能を持たせようとしていることを意味しています。 – Issa

+0

私はこのマッピングをしない限り、Employee emp = somethingのように使うことはできませんでした。 emp.getDepartment()。getDepartmentName();という名前で呼び出します。またはemp.getDepartment()。getManager()。firstName();どうか、これを行う正しい方法を教えてください。 – Issa

+0

基本的には、自己プログラミングマッピングまたはORMのどちらかを選択するのが正しい方法ですか? ORM(JPA2 with Hibernate、TopLink and friends)に行くだろうが、あなたはORMの知識が必要になるだろう。 ORM側の他の落とし穴:-) –

関連する問題