型号
@Column(name="Desc", name="des", name="DS")
private String description;
如何提及列的多个名称?那么,如果有人发现它将值映射到描述?
答案 0 :(得分:0)
如何提及列的多个名称?
你不能。数据库不允许列具有多个名称,因此您无法将多个列名称映射到类字段。
那么,如果有人发现它将值映射到描述?
如果您有多个存储过程在各自的结果集中返回" Desc" ," des" ," ds" 并且您需要将其映射到同一Java类 - 您需要定义不同的行映射器并在那里描述映射。
例如,假设您有SP1和SP2,并且您希望将这些结果集映射到ResultDto。 ResultDto看起来像:
public class ResultDto {
private String name; //always maps to DB column "name"
private String desc; //maps to different DB columns - "ds", "desc"
//ommitted..
}
您可以定义基本行映射器并定义所有Stored Procs结果集的所有重叠字段的映射。
代码示例:
protected static abstract class BaseRowMapper implements RowMapper<ResultDto> {
public abstract ResultDto mapRow(ResultSet rs, int rowNum) throws SQLException;
protected void mapBase(ResultSet rs, ResultDto resultDto) throws SQLException {
resultDto.setName(rs.getString("name")); //map all overlapping fields/columns here
}
}
private static class SP1RowMapper extends BaseRowMapper {
@Override
public ResultDto mapRow(ResultSet rs, int rowNum) throws SQLException {
ResultDto resultDto = new ResultDto();
mapBase(rs, resultDto);
resultDto.setDescription(rs.getString("ds"));
return resultDto;
}
}
private static class SP2RowMapper extends BaseRowMapper {
@Override
public ResultDto mapRow(ResultSet rs, int rowNum) throws SQLException {
ResultDto resultDto = new ResultDto();
mapBase(rs, resultDto);
resultDto.setDescription(rs.getString("desc"));
return resultDto;
}
}
我不知道您如何调用存储过程,但如果您使用Spring SimpleJdbcCall
,代码将如下所示:
new SimpleJdbcCall(datasource)
.withProcedureName("SP NAME")
.declareParameters(
//Stored Proc params
)
.returningResultSet("result set id", rowMapperInstance);