java.sql.BatchUpdateException: строка x была вырезана GROUP_CONCAT()

У меня есть функция пакетного обновления, которая не содержит вызова GROUP_CONCAT();

UPDATE 
    product 
SET 
    viewed = ? 
WHERE 
    product_id = ? 

Как видите, это подготовленное заявление. Я устанавливаю его значения, а затем добавляю их с помощью метода addBatch() для каждой строки. Когда мой счет достигает определенного предела (1000), я вызываю executeBatch(), чтобы выполнить модификацию базы данных. Как видите, в моем процессе пакетного обновления нет вызова group_concat(), но mysql jdbc выдает это исключение. Какова скрытая связь между пакетным обновлением и group_concat() и почему? Что я могу сделать, чтобы решить эту проблему? Уменьшение лимита пакетов или увеличение лимита group_concat()?

Моя трассировка стека:

java.sql.BatchUpdateException: Row 276751 was cut by GROUP_CONCAT()
    at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:2054)
    at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1467)
    at datasource.DB.execPreparedStatement(DB.java:480)
    at datasource.DB.addBatch(DB.java:467)
    at cj.reportsummarydaily.ProductViewed.executeJob(ProductViewed.java:24)
    at job.Job.executeCore(Job.java:101)
    at job.Job.execute(Job.java:77)
    at cj.reportsummarydaily.Main.executeJobMeta(Main.java:35)
    at job.JobMeta.execute(JobMeta.java:32)
    at cronjob.CronJob.main(CronJob.java:66)
Caused by: java.sql.SQLException: Row 276751 was cut by GROUP_CONCAT()
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4187)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4119)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2815)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2458)
    at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:2006)
    ... 9 more

person csonuryilmaz    schedule 24.12.2014    source источник


Ответы (1)


Я нашел и исправил проблему. Один из наших бывших программистов написал ошибочный триггер перед обновлением для табличного продукта. Поэтому, когда я обновлял таблицу продуктов, триггер вызывал это исключение для некоторых конкретных записей. Я правильно перепрограммировал триггер и добавил код ниже, чтобы увеличить лимит group_concat;

SET group_concat_max_len=1024 * 10;
person csonuryilmaz    schedule 25.12.2014