我有一个连接表的查询:
SELECT * FROM data d1 join data d2 ON d1.id != d2.id WHERE ...
我已经拥有RowMapper
Data
,这是表data
的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 :(得分: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>
我认为你可以将它改编为一对一的映射。