用户登录
用户注册

分享至

hibernate设置自动提交

  • 作者: lu117666571
  • 来源: 51数据库
  • 2020-10-17
这个属性是说,如果是true的话,就是自动提交,比如
在一个业务中中,你有多个操作数据库的子业务,
例如
业务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代码
























org.hibernate.dialect.mysqldialect
true
true
50
20




web-inf/classes/pojo/*.hbm.xml

















propagation_supports,readonly
propagation_required,readonly
propagation_required
propagation_required
propagation_required











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;
软件
前端设计
程序设计
Java相关