Исключение при отображении 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 закрывает соединение, и это вызывает исключение.

Другие вопросы по тегам