Как исправить ошибку в SimpleJdbcInsert в приложении Spring BootJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как исправить ошибку в SimpleJdbcInsert в приложении Spring Boot

Сообщение Anonymous »

Я изучаю Spring Boot, читая книгу Spring in Action 5. Я пытаюсь вставить данные во встроенную базу данных H2. Я использую SimpleJdbcInsert и метод ExecuteAndReturnKey.

Вот конструктор :

Код: Выделить всё

 @Autowired
public JdbcOrderRepository(JdbcTemplate jdbc) {

this.orderInserter = new SimpleJdbcInsert(jdbc).withTableName("Taco_Order").usingGeneratedKeyColumns("id");
this.orderTacoInserter = new SimpleJdbcInsert(jdbc).withTableName("Taco_Order_Tacos");
this.objectMapper = new ObjectMapper();
}
Вот методы вставки данных:

Код: Выделить всё

@Override
public Order save(Order order) {

order.setPlacedAt(new Date());
long orderId = saveOrderDetails(order);
order.setId(orderId);
List tacos = order.getTacos();

for (Taco taco : tacos)
saveTacoToOrder(taco, orderId);

return order;
}

private long saveOrderDetails(Order order) {
Map values = objectMapper.convertValue(order, Map.class);
values.put("placedAt", order.getPlacedAt());
long orderId = orderInserter.executeAndReturnKey(values).longValue();

return orderId;
}
Ошибка в этой строке:

Код: Выделить всё

long orderId = orderInserter.executeAndReturnKey(values).longValue();
Текст ошибки:

Код: Выделить всё

 There was an unexpected error (type=Internal Server Error, status=500).
PreparedStatementCallback; ???????? NULL ?? ????????? ??? ????
"DELIVERYNAME" NULL not allowed for column "DELIVERYNAME"; SQL statement:
INSERT INTO Taco_Order (DELIVERYNAME, DELIVERYSTREET, DELIVERYCITY,
DELIVERYSTATE, DELIVERYZIP, CCNUMBER, CCEXPIRATION, CCCVV, PLACEDAT)
VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?) [23502-197]; nested exception is
org.h2.jdbc.JdbcSQLException: ???????? NULL ?? ????????? ??? ????
"DELIVERYNAME" NULL not allowed for column "DELIVERYNAME"; SQL statement:
INSERT INTO Taco_Order (DELIVERYNAME, DELIVERYSTREET, DELIVERYCITY,
DELIVERYSTATE, DELIVERYZIP, CCNUMBER, CCEXPIRATION, CCCVV, PLACEDAT)
VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?) [23502-197]
Но в отладчике всё в порядке:
параметр value полностью загружен значениями.
скриншот идеи

Порядок классов:

Код: Выделить всё

@Data
public class Order {

@NotBlank(message = "Name is required")
private String name;

@NotBlank(message = "Name is required")
private String street;

@NotBlank(message = "Name is required")
private String city;

@NotBlank(message = "Name is required")
private String state;

@NotBlank(message = "Name is required")
private String zip;

@CreditCardNumber(message = "Not valid cc")
private String ccNumber;

@Pattern(regexp = "^(0[1-9]|1[0-2])([\\/])([1-9][0-9])$", message = "Must be formatted MM/YY")
private String ccExpiration;

@Digits(integer = 3, fraction = 0, message = "Invalid CVV")
private String ccCVV;

private Long id;
private Date placedAt;

List tacos = new ArrayList();

public void addDesign(Taco design) {
this.tacos.add(design);
}

}
Как решить эту проблему и вставить данные в базу данных H2 с помощью SimpleJdbcInsert?

Подробнее здесь: https://stackoverflow.com/questions/553 ... pplication
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»