Spring Jdbc Template + MySQL = TransientDataAccessResourceException: недопустимое значение аргумента: Java.io.notSerializationException - PullRequest
2 голосов
/ 02 июня 2010

Я использовал шаблон Spring JDBC для вставки некоторых данных в базу данных, и я получал эту ошибку.

Вот мой код:

JdbcTemplate insert = new JdbcTemplate(dataSource);
        for(ResultType result : response.getResultSet().getResult())
        {
            Object[] args = new Object[] {result.getAddress(), result.getCity(), result.getState(), result.getPhone(), result.getLatitude(), result.getLongitude(),result.getRating().getAverageRating(), result.getRating().getAverageRating(), result.getRating().getTotalRatings(), result.getRating().getTotalReviews(), result.getRating().getLastReviewDate(), result.getRating().getLastReviewIntro(), result.getDistance(), result.getUrl(), result.getClickUrl(), result.getBusinessUrl(), result.getBusinessClickUrl()};
            insert.update("INSERT INTO data.carwashes ( address, city, state, phone, lat, lng, rating, average_rating, total_ratings, total reviews, last_review_date, last_review_intro, distance, url, click_url, business_url, business_click_url, category_id, zipcode_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,96925724,78701)", args);
        }

Довольно длинный код ... но, в основном, он получает значение от объекта, прикрепляет его к массиву и передает этот массив для вставки метода шаблона jdbc.

Любая помощь будет оценена.

1 Ответ

4 голосов
/ 02 июня 2010

Я предполагаю, что один из элементов в вашем массиве arg имеет тип, не распознаваемый JdbcTemplate (то есть это не String, Date и т. Д.), И поэтому он вызывает setObject() по заявлению. Затем драйвер попытается сериализовать аргумент в двоичный файл, обнаружит, что он не сериализуем, и сгенерирует исключение.

Убедитесь, что все аргументы в массиве соответствуют вашим ожиданиям, например, они не должны быть экземплярами ваших собственных классов, но должны быть стандартными типами Java.

...