对于一个方法中多次操作数据库时,只有在每一个子方法没有报错,并且整个方法执行完后,事务才一起提交,如果某个子方法有异常,spring将该事务标志为rollback only,在被标记后和将该异常抛出前,想去执行数据库的话是不允许的。
此时即使没有将异常抛出,但是如果继续去操作数据库的话,一样是会报Transaction rolled back because it has been marked as rollback-only的异常,倘若就是想将该异常记录到数据库该怎么办?重新启动一个独立事务去处理。
如果这个子方法没有将异常往上整个方法抛出或整个方法未往上抛出,那么该异常就不会触发事务进行回滚,事务就会在整个方法执行完后就会提交,这时就会造成Transaction rolled back because it has been marked as rollback-only的异常,如果我们往上抛了改异常,spring就会获取异常,并执行回滚。
再一次操作中配置了两个属性值不能为空
但是传入的时候这两个值为空
但是奇怪的是Hibernate并没有提示异常,反而在保存进数据库时报javax.persistence.RollbackException: Transaction marked as rollbackOnly异常。