ssh框架增加同数据时,无法捕获抛出异常进不去catch里面

骚年少年 2018-12-15 10:19:39
在做ssh框架增加数据时候,添加同一条数据时,无法捕获抛出异常,求大神帮忙解决!!谢谢
访问类DAO
public Integer addDbodler(Dbodler dbodler) {
try {
super.save(dbodler);
return 1;
} catch (Exception e) {
return 0;
}
}

实现类BIZ
public boolean isAdd(Dbodler dbodler) {
// TODO 自动生成的方法存根
if (dbodlerDao.addDbodler(dbodler)>0) {
return true;
}
return false;
}
...全文
555 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
张仰泽 2018-12-22
  • 打赏
  • 举报
回复
你再调用dao层时try catch 后return了 系统认为是这个异常已经处理,在你调用service时当然不会catch到 ,你需要在addDbodler(Dbodler dbodler) 这个方法try catch后throw一个runtimeException,这时isAdd就可以try catch到了
骚年少年 2018-12-20
  • 打赏
  • 举报
回复
引用 11 楼 bcsflilong 的回复:
而且你这个程序是不是定义了什么切面 在切面那里就已经出错了 导致这个try没有被执行



我在事务增强中注释add之后
<!-- <tx:method name="is*" propagation="REQUIRED"/>
<tx:method name="*" propagation="REQUIRED" /> -->

dao层代码
public Integer addDbodler(Dbodler dbodler) {
try {
super.save(dbodler);
return 1;
} catch (Exception e) {
// TODO: handle exception
System.out.println(e);
return 0;
}

}
测试运行之后
Hibernate:
insert
into
dbodler
--------------
values
(?, ?, ?, ?, ?, ?, ?)
org.springframework.dao.DataIntegrityViolationException: Could not execute JDBC batch update; SQL [insert into dbodler () values (?, ?, ?, ?, ?, ?, ?)]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
0

可以进入catch
骚年少年 2018-12-20
  • 打赏
  • 举报
回复
引用 11 楼 bcsflilong 的回复:
而且你这个程序是不是定义了什么切面 在切面那里就已经出错了 导致这个try没有被执行

只是用了事务增强
<!-- 1、配置事务管理器 -->
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 配置切入点 -->
<aop:config>
<aop:pointcut id="pointcuts" expression="execution(* cn.king.biz..*.*(..))" />
<aop:advisor pointcut-ref="pointcuts" advice-ref="txAdvance"/>
</aop:config>
<!-- 2、配置事务增强 -->
<tx:advice id="txAdvance" transaction-manager="txManager">
<tx:attributes>
<tx:method name="find*" read-only="true" />
<tx:method name="get*" read-only="true" />
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="is*" propagation="REQUIRED"/>
<tx:method name="*" read-only="true" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>


我事务增强取消掉之后就能够进去catch里面,但是我事务增强没有问题的呀,大神能帮我看下嘛!
bcsflilong 2018-12-17
  • 打赏
  • 举报
回复
而且你这个程序是不是定义了什么切面 在切面那里就已经出错了 导致这个try没有被执行
bcsflilong 2018-12-17
  • 打赏
  • 举报
回复
你在实现类里打断点 一直跟进去 看看原因 如果有完整代码 我可以帮你找找原因
骚年少年 2018-12-17
  • 打赏
  • 举报
回复
引用 3 楼 咸哼酒家 的回复:
数据库底层操作的异常通常直接抛出来了,抛出来了
int num = save(dbodler);//返回一个数字:插入的记录条数,成功为1或者更大的数字,失败就是0


save(dbodler)返回Serializable成功或者失败都是返回主键,修改返回int报错 ,但是报错之后没发进入catch (Exception e) 里面
骚年少年 2018-12-17
  • 打赏
  • 举报
回复
就是进不去catch里面
骚年少年 2018-12-17
  • 打赏
  • 举报
回复
save(dbodler)返回Serializable成功或者失败都是返回主键,修改返回int报错 ,但是报错之后没发进入catch (Exception e) 里面
零落飞花雨 2018-12-16
  • 打赏
  • 举报
回复
有个方法e.print开头的
零落飞花雨 2018-12-16
  • 打赏
  • 举报
回复
你catch的时候要打印一下异常
零落飞花雨 2018-12-16
  • 打赏
  • 举报
回复
看报错信息,你应该是添加时主键重复了
咸哼酒家 2018-12-16
  • 打赏
  • 举报
回复
数据库底层操作的异常通常直接抛出来了,抛出来了
int num = save(dbodler);//返回一个数字:插入的记录条数,成功为1或者更大的数字,失败就是0
骚年少年 2018-12-15
  • 打赏
  • 举报
回复
aop配置:
<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:advice id="txAdvance" transaction-manager="txManager">
<tx:attributes>
<tx:method name="find*" read-only="true" />
<tx:method name="get*" read-only="true" />
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="is*" propagation="REQUIRED"/>
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut expression="execution(* cn.king.biz.impl.*.*(..))"
id="pointcut" />
<aop:advisor advice-ref="txAdvance" pointcut-ref="pointcut" />
</aop:config>
骚年少年 2018-12-15
  • 打赏
  • 举报
回复
在插入通条数据是控制台显示:
Exception in thread "main" org.springframework.dao.DataIntegrityViolationException: Could not execute JDBC batch update; SQL [insert into dbodler (odphone, oddate, odhoid, oduname, odselIid, odchannel, ordernumber) values (?, ?, ?, ?, ?, ?, ?)]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:643)
at org.springframework.orm.hibernate3.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:795)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:666)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:755)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:724)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:475)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:270)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:91)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at com.sun.proxy.$Proxy5.isAdd(Unknown Source)
at cn.king.util.test.main(test.java:22)
Caused by: org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:96)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:268)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:184)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:658)
... 11 more
Caused by: java.sql.BatchUpdateException: Duplicate entry '112112111' for key 'PRIMARY'
at com.mysql.jdbc.SQLError.createBatchUpdateException(SQLError.java:1168)
at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1778)
at com.mysql.jdbc.PreparedStatement.executeBatchInternal(PreparedStatement.java:1262)
at com.mysql.jdbc.StatementImpl.executeBatch(StatementImpl.java:970)
at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)
at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
... 19 more
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '112112111' for key 'PRIMARY'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.Util.getInstance(Util.java:408)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2484)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)
at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2079)
at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1756)
... 25 more

81,095

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧