报错Could not execute JDBC batch update和java.sql.BatchUpdateException: Duplicate e

本文介绍了一个关于使用Hibernate框架时遇到的批量更新异常问题及解决方案。作者通过调整配置文件中的唯一性设置解决了CouldnotexecuteJDBCbatchupdate和java.sql.BatchUpdateException错误。
报错Could not execute JDBC batch update和java.sql.BatchUpdateException: Duplicate e
最近学hibernate,写了一段代码,第一次执行没问题,第二次执行报错了,想了一下,不应该是其他毛病,且报错是更新(update)出错,估计是第二次执行的时候刚好与第一次执行的结果出现了矛盾,于是去数据库将第一次执行的结果(主码)改了一下,再执行就不会报错了,呵呵(主要原因还是我在配置文件中对Department类和Employee类的id设置了唯一性)
package cn.itcast.hibernate;

import org.hibernate.Session;
import org.hibernate.Transaction;

import cn.itcast.hibernate.HibernateUtils;

import cn.itcast.hibernate.domain.Department;
import cn.itcast.hibernate.domain.Employee;

public class Many2One {

public static void main(String[] args){
add();
}


static Department add(){
Session s = null ;
Transaction tx = null;
try{
Department depart = new Department();
depart.setName("depart name");

Employee emp = new Employee();
emp.setDepart(depart);//因为这一行代码,将Employee和Department关联起来了
emp.setName("emp name");
s = HibernateUtils.getSession();
tx = s.beginTransaction();
s.save(depart);//先保存了depart
s.save(emp);//后保存emp,从而保证了emp中的Department不是空的
tx.commit();
return depart;
}finally{
if(s != null)
s.close();
}

}

}
这是什么错误?如何解决 ===================================== total ellipse time: 310.510803 s ------------------------------------- Total Read Tables Count: 9 Total Failure Tables Count: 1 Total Read Record Size: 598.58 MB Total Writer Duration: 310.355 s Table Detail Information Follows: app.raa_result_item --> app.raa_result_item [read: 12426, write:12416] app.daily_report --> app.daily_report [read: 528, write:528] app.execution_result_item --> app.execution_result_item [read: 251207, write:201200] app.unique_execution_result_item --> app.unique_execution_result_item [read: 202454, write:165312] app.execution_result --> app.execution_result [read: 72675, write:57675] app.daily_report_otm_execution_result --> app.daily_report_otm_execution_result [read: 901, write:882] app.daily_report_detail --> app.daily_report_detail [read: 7950, write:5051] app.daily_report_special_result --> app.daily_report_special_result [read: 412, write:412] app.raa_result --> app.raa_result [read: 553, write:553] Exception Detail Information Follows: [1]app.unique_execution_result_item --> app.unique_execution_result_item Write Stack Information : org.springframework.dao.DuplicateKeyException: PreparedStatementCallback; SQL [UPDATE `app`.`unique_execution_result_item` SET `execution_result_item_id`=? , `is_active`=? , `created_at`=? , `updated_at`=? WHERE `id`=?]; Duplicate entry '4032499' for key 'unique_execution_result_item.unique_execution_result_item_UN'; nested exception is java.sql.BatchUpdateException: Duplicate entry '4032499' for key 'unique_execution_result_item.unique_execution_result_item_UN' at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:247) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1443) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:633) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:647) at org.springframework.jdbc.core.JdbcTemplate.batchUpdate(JdbcTemplate.java:936) at org.springframework.jdbc.core.JdbcTemplate.batchUpdate(JdbcTemplate.java:990) at com.gitee.dbswitch.provider.sync.DefaultTableDataSynchronizeProvider.executeUpdate(DefaultTableDataSynchronizeProvider.java:162) at com.gitee.dbswitch.provider.sync.AutoCastTableDataSynchronizeProvider.executeUpdate(AutoCastTableDataSynchronizeProvider.java:31) at com.gitee.dbswitch.data.handler.ReaderTaskThread$1.lambda$doUpdate$1(ReaderTaskThread.java:656) at com.gitee.dbswitch.data.handler.WriterTaskThread.doProcess(WriterTaskThread.java:55) at com.gitee.dbswitch.data.handler.WriterTaskThread.doProcess(WriterTaskThread.java:27) at com.gitee.dbswitch.core.task.TaskProcessor.get(TaskProcessor.java:60) at com.gitee.dbswitch.core.task.TaskProcessor.get(TaskProcessor.java:15) at com.gitee.dbswitch.common.entity.LoggingSupplier.get(LoggingSupplier.java:31) at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1604) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:750) Caused by: java.sql.BatchUpdateException: Duplicate entry '4032499' for key 'unique_execution_result_item.unique_execution_result_item_UN' at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at com.mysql.cj.util.Util.handleNewInstance(Util.java:192) at com.mysql.cj.util.Util.getInstance(Util.java:167) at com.mysql.cj.util.Util.getInstance(Util.java:174) at com.mysql.cj.jdbc.exceptions.SQLError.createBatchUpdateException(SQLError.java:224) at com.mysql.cj.jd=====================================
08-14
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值