2014-11-14 21 views
0

我有加入一個表本身的查詢:JDBC映射使用現有的RowMapper同桌的加入

SELECT * FROM data d1 join data d2 ON d1.id != d2.id WHERE ... 

而且我已經有一個RowMapperData,這是表的java對象data。現在,我可以去和這些字段映射逐一建立兩個數據對象:

jdbcTemplate.query(sql, new RowMapper() 
     { 

      @Override 
      public Object mapRow(ResultSet arg0, int arg1) throws SQLException 
      { 
       Data d1 = new Data(); 
       Date d2 = new Date(); 
       Data [] duple = new Data []{d1, d2}; 

       d1.setId(arg0.getLong(1)); 
       d1.setRegistryName(arg0.getString(2)); 
       ... 
       d2.setId(arg0.getLong(11)); 
       d2.setRegistryName(arg0.getString(12)); 
       ... 

       return duple; 
      } 
     }); 

但是,這是一個很大的體力勞動。因此,我可以用我的DataRowMapper映射的第一個對象,但後來我不得不手動映射第二個:

jdbcTemplate.query(sql, new RowMapper() 
     { 

      @Override 
      public Object mapRow(ResultSet arg0, int arg1) throws SQLException 
      { 
       Data d1 = new Data(); 
       Date d2 = new Date(); 
       Data [] duple = new Data []{d1, d2}; 
       d1 = new DataRowMapper<ShopSyncInfo>(Data.class).mapRow(arg0, arg1); 

       d2.setId(arg0.getLong(11)); 
       d2.setRegistryName(arg0.getString(12)); 
       ... 

       return duple; 
      } 
     }); 

所以我想第二個對象映射以同樣的方式。有沒有辦法做到這一點?

回答

0

支持映射Spring Data JDBC Extensions項目中提供的一對多關係。請參閱docs。您需要將此項目添加到您的版本。然而,這樣下面的相關性是足夠的,你不需要額外的Oracle技術支持:

<dependency> 
    <groupId>org.springframework.data</groupId> 
    <artifactId>spring-data-jdbc-core</artifactId> 
    <version>1.1.0.RELEASE</version> 
</dependency> 

我認爲,你可以爲一個一對一的映射適應這一點。