spring提供的hibernate模板类HibernateTemplate,中save等方法是怎么提交事务的?
发布网友
发布时间:2022-04-14 11:53
我来回答
共3个回答
热心网友
时间:2022-04-14 13:22
setAutoCommit 默认是true 说明save方法是自动提交的
还有这个方法是java.sql.Connection借口提供的 不是hibernate的
方法说明如下:
void setAutoCommit(boolean autoCommit)
throws SQLException将此连接的自动提交模式设置为给定状态。如果连接处于自动提交模式下,则它的所有 SQL 语句将被执行并作为单个事务提交。否则,它的 SQL 语句将聚集到事务中,直到调用 commit 方法或 rollback 方法为止。默认情况下,新连接处于自动提交模式。
提交发生在语句完成时。语句完成的时间取决于 SQL 语句的类型:
对于 DML 语句(比如 Insert、Update 或 Delete)和 DDL 语句,语句在执行完毕时完成。
对于 Select 语句,语句在关联结果集关闭时完成。
对于 CallableStatement 对象或者返回多个结果的语句,语句在所有关联结果集关闭并且已获得所有更新计数和输出参数时完成。
注:如果在事务和自动提交模式更改期间调用此方法,则提交该事务。如果调用 setAutoCommit 而自动提交模式未更改,则该调用无操作(no-op)。
参数:
autoCommit - 为 true 表示启用自动提交模式;为 false 表示禁用自动提交模式
抛出:
SQLException - 如果发生数据库访问错误,在参与分布式事务的同时调用 setAutoCommit(true),或者在关闭的连接上调用此方法
还有save方法是在org.hibernate.Session这个接口里
save
Serializable save(Object object)
throws HibernateExceptionPersist the given transient instance, first assigning a generated identifier. (Or using the current value of the identifier property if the assigned generator is used.) This operation cascades to associated instances if the association is mapped with cascade="save-update".
Parameters:
object - a transient instance of a persistent class
Returns:
the generated identifier
Throws:
HibernateException
热心网友
时间:2022-04-14 14:40
使用HibernateTemplate执行execute(new HibernateCallback())方法,从HibernateCallback中得到session,
在此session中做多个操作,并希望这些操作位于同一个事务中。
如果这样写:
public static void main(String ss[]) {
CtxUtil.getBaseManager().getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException, SQLException {
// 保存stu1
Student stu1 = new Student();
stu1.setName("aaaa");// 在数据库中,name字段不允许为null
session.save(stu1);
session.flush();//实际上,如果不是程序员"手痒"来调用这个flush(),HibernateTemplate中session的事务处理
还是很方便的
Student stu2 = new Student();
session.save(stu2);// 没有设置name字段,预期会报出例外
session.flush();
return null;
}
});
}
热心网友
时间:2022-04-14 16:15
这是针对事务的,auto commit就是自动提交事务