2011-07-19 1 views
0

Comment puis-je mapper des lignes de deux tables se référant mutuellement? Par exemple, il existe des tables Employee et Department. L'employé a une référence au modèle de département qui est le département de l'employé et le département a une référence au modèle d'employé qui est le gestionnaire du département. Alors, comment puis-je mapper des lignes en utilisant Spring RowMapper.Lignes de mappage Spring Jdbc

Merci,

+0

'RowMapper' fonctionne sur les résultats, pas sur les tables. Vous devez écrire le SQL correct, puis mapper le jeu de résultats à plat comme vous le souhaitez. – skaffman

Répondre

1

Comment puis-je mapper lignes de deux tables qui renvoie l'autre?

par exemple comme ceci:

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; 
    } 
} 

pour la partie SQL je vous recommande de créer une nouvelle question avec les détails SQL spécifiques (tables, relations, etc.) et sql tagged, il devrait trouver plus (sql-savvy) viewers de cette façon

+0

Merci, ceci est applicable pour les petits objets de domaine où la relation n'est pas très complexe. Mais en fait je veux que chaque classe de modèle ait sa propre classe de mappeur. Par exemple: Le modèle Employee a une référence à Department et lors du remplissage du modèle de domaine, j'ai besoin de la classe Employee pour demander la classe Department Mapper pour l'instance de département référencée qui est basée sur l'ID de département. Et vice versa. Cela signifie que j'essaie d'avoir la fonctionnalité que je reçois des outils ORM comme EJB. – Issa

+0

Sauf si je fais cette cartographie je ne pourrais pas utiliser comme employé emp = quelque chose; et appelez comme emp.getDepartment(). getDepartmentName(); ou emp.getDepartment(). getManager(). firstName(); S'il vous plaît, pourriez-vous me suggérer la bonne façon de le faire. – Issa

+0

fondamentalement vous choisissez soit la cartographie auto-programmée ou ORM, qui est la bonne façon? dépend de vos besoins, performance, durée de vie prévue de la mise en œuvre, changements attendus etc. si vous avez plus d'un de ces mappings - j'irais ORM (JPA2 avec Hibernate, TopLink et amis), mais vous aurez besoin de connaissances ORM, il y a juste autres pièges du côté ORM :-) –