在一个业务中中,你有多个操作数据库的子业务,
例如
业务SuperA中有子业务suba,subb,subc.....
如果是自动的话,
suba操作成功 提交
subb操作失败 回滚
subc操作失败 回滚
按照逻辑当SuperA中有某一环节操作失败的话,都应该回滚到没有操作之前
而当为true时(connection.autocommit=true),则为出现a成功 b,c失败 ,SuperA不具备了时务的特征,原子性等等
当不是true时(connection.autocommit=false),,这时事务的管理提交给了spring,Spring的事务控制是以一个bean为单位的,
SuperA是bean中一个方法或者其它,这样当执行事务SuperA时,只要a,b,c...中一个失败,都
会认定是失败操作 roolback. 这样避免了脏数据的出现,也合乎了事务的特征。。
你的session没有关闭,所以获取到的categoryGet对象是持久态的,所有的操作,但你commit之后,都会提交到数据库中。
把hibernate的三种对象状态和save、update等方法的用途搞清楚,就知道了。
也许事务帮你提交了
一、配置如下:
1)applicationcontext-common.xml
java代码
2、spring-servlet.xml
java代码 收藏代码
二、相关代码如下:
1)action中的删除操作
java代码
/**
* 删除记录
*
* @param id
*/
@requestmapping(value = "log_delete")
public string delete(httpservletrequest request, long id) {
if (id != null) {
eq.println("============^_^=============执行删除操作,id=" + id);
logservice.delete(id);
eq.println("============^_^=============操作执行结束=======");
}
eq.println("**********地址来源=" + eq.getreferer(request));
return "redirect:log_list";
}
2)service中的删除操作
java代码 收藏代码
/**
* 根据主键删除实体
*/
@override
public void delete(long id) {
dao.delete(log.class, id);
//dao.flush();
}
3)dao中的删除操作
java代码 收藏代码
public boolean delete(final class??> clazz, final long id) {
assert.notnull(id, "id不能为空");
try {
getsession().delete(getsession().load(clazz, id));
logger.debug("delete entity {},id is {}", clazz.getsimplename(), id);
return true;
} catch (exception e) {
e.printstacktrace();
return false;