我有以下
@Data //Lombok annotation to generate getters and setters
@Entity
public class TradeLog {
@Id
@Column(name="P_TRADE_ID")
private String tradeId;
}
tradeLog.setTradeId("1");
SqlParameterSource insertParam = new BeanPropertySqlParameterSource(tradeLog);
System.out.println(insertProc.execute(insertParam));
我收到此错误Exception in thread "main" org.springframework.dao.InvalidDataAccessApiUsageException: Required input parameter 'P_TRADE_ID' is missing
我知道我可以直接在jdbc模板上进行映射,但是有什么办法可以使用java持久性注释或类似的东西为我处理呢?
答案 0 :(得分:1)
JDBC模板没有提供这种功能,但是您可以轻松地使用反射来扫描所有@Column
字段并将其值填充到MapSqlParameterSource
,这是SqlParameterSource
的另一种实现。如下所示,您可以将其包装到一个函数中以方便使用:
tradeLog.setTradeId("1");
//Create MapSqlParameterSource based on tradeLog
MapSqlParameterSource param = new MapSqlParameterSource();
for(Field field : TradeLog.class.getDeclaredFields()) {
Column column = field.getAnnotation(Column.class);
if(column != null) {
field.setAccessible(true);
param.addValue(column.name(), field.get(tradeLog));
}
}
insertProc.execute(param)