BeanPropertySqlParameterSource с аннотациями pojo - PullRequest
0 голосов
/ 08 июля 2019

У меня есть следующее

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

1 Ответ

1 голос
/ 08 июля 2019
Шаблон

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)
...