Исключение при отображении java.math.BigDecimal в тип данных DB2 Numeric.
В работе мы используем базу данных DB2, и в одной таблице первичный ключ имеет тип Numeric. Для этой таблицы я создаю класс сущности и устанавливаю свойство BigDecimal для первичного ключа. При попытке вставить новую строку в этой таблице, используя
entityManager.persist(entity);
все отлично. Новая строка будет добавлена в таблицу. Но проблема в том, что нам нужно вставить несколько записей одновременно, и по этой причине я реализовал этот метод:
public void addCars(final List<CarContainer> cars) throws SQLException {
Date date = new Date();
final java.sql.Date recDate = new java.sql.Date(date.getTime());
final Timestamp dateCreated = new Timestamp(date.getTime());
Session session = em.unwarp(Session.class);
session.doWork(new Work() {
@Override
public void execute(Connection connection) throws SQLException {
String carsSql = "INSERT INTO " +
"cars" +
" (cars_id, cars_name,
cars_rec_status, created)" +
"VALUES" +
" (?, ?, ?, ?)";
NullablePreparedStatement carsPreparedStatement =
NullablePreparedStatement.wrap(connection.prepareStatement(carsSql));
for (CarContainer carContainer : cars) {
brandsPreparedStatement
.setBigDecimal(1, carContainer.getCarId())
.setString(2, carContainer.getName())
.setShort(3, carContainer.getRecordStatus())
.setDate(4, recDate,
DateUtil.getCalendarInstance());
carsPreparedStatement.unwrap().addBatch();
}
carsPreparedStatement.unwrap().executeBatch();
if (!carsPreparedStatement.unwrap().isClosed()) {
carsPreparedStatement.unwrap().close();
}
});
}
И в этом проблема. Когда я использую собственный запрос, я получаю исключение, когда в этой строке кода:
.setBigDecimal(1, carContainer.getBrandsId())
По какой-то причине BigDecimal не отображается правильно на число, когда используется собственная вставка.
1 ответ
@Mustaccio спасибо за совет, но не нужно. Я не пью водку или что-то еще;). Моя проблема была решена, и проблема была в методе carContainer.getCarId(), который делает запрос выбора. Я не знал, что в методе doWork я не должен делать запрос select. После выбора EntityManager закрывает соединение, и это вызывает исключение.