日期:2014-05-17  浏览次数:20767 次

整合ssh,使用hibernateTemplate怎么确定增删改成功
如题,我怎么判断对数据库做出的插入,更新,删除操作是否成功或者失败从而执行不同的操作呢

------解决方案--------------------
首先排除出现异常的事情,比如HQL本身写错、数据库连接失败啥的,这类就不用讨论了。

对于这几种语句,都是有返回值的,返回值代表影像记录条数。根据这个返回值来判断是否成功,甚至是部分成功。

比如你心里预期是更新10条,结果返回值是5条,这就是部分成功,可能比比全部失败还更惨。
------解决方案--------------------
1楼正解,每个insert into, update, delete都会反回一个整数,这个整数就代表本次更新操作成功的个数,不过一般是这样认为的,如果多条记录hibernate会将所有操作执行成功才会commit而不是逐行提交.所以基本可以认为只要没有抛出SQLException本次操作就是成功,如果catch错误直接rollback不会有太多的影响
------解决方案--------------------
hibernate封装的事务处理,当插入,更新,删除操作无异常,则事务提交,否则回滚事务。
------解决方案--------------------
对于sql或编译异常可以上抛到应用层提示,至于操作一方面可以用事务控制,另外如select hibernate本身会有返回,update、delete、insert等可以自定义返回类型或结果就可以判断了。
------解决方案--------------------
这些执行语句执行成功后都会有返回值
比如update一条信息 那么返回值就是1
楼主可以根据这个1 提示用户更新成功
若返回0 也就是更新失败
------解决方案--------------------
探讨

1楼正解,每个insert into, update, delete都会反回一个整数,这个整数就代表本次更新操作成功的个数,不过一般是这样认为的,如果多条记录hibernate会将所有操作执行成功才会commit而不是逐行提交.所以基本可以认为只要没有抛出SQLException本次操作就是成功,如果catch错误直接rollback不会有太多的影响

------解决方案--------------------
探讨
如题,我怎么判断对数据库做出的插入,更新,删除操作是否成功或者失败从而执行不同的操作呢

------解决方案--------------------

哦,HibernateTemplate的update()函数,只能针对单条数据做更新,所以不需要返回更新数量,更新失败直接就抛异常了;

批量更新是另一个函数:bulkUpdate(),返回值:“the number of instances updated/deleted”。


针对单笔更新的的update(),直接就是catch(DataAccessException)来处理即可,如果你需要分类给出不同的提示信息,就需要更详细的处理,按照子异常类型来处理,包括:
CleanupFailureDataAccessException, ConcurrencyFailureException, DataAccessResourceFailureException, DataIntegrityViolationException, DataRetrievalFailureException, DataSourceLookupFailureException, InvalidDataAccessApiUsageException, InvalidDataAccessResourceUsageException, PermissionDeniedDataAccessException, UncategorizedDataAccessException
品种比较齐全。
------解决方案--------------------
探讨
还有个问题想问问大家,什么样的bean才适合交给spring管理呢??entity类交给它管也可以,但是这合适吗?我使用spring就应该把所有的类都交给它吗?