у меня есть следующее
@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 или что-то в этом роде, чтобы справиться с этим для меня?




Шаблон 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)
Это облом. Вероятно, лучше дать моим полям грубые имена, чем использовать отражение, но спасибо за подтверждение того, что то, что я хотел, не существует.