0 0

请教hibernate.connection.autocommit的问题30

用Spring整合Hibernate。没有用事务,Spring配置如下:

<beans>
    <bean id="dataSource"
    	class="org.apache.commons.dbcp.BasicDataSource">
    	<property name="driverClassName"
    		value="com.mysql.jdbc.Driver">
    	</property>
    	<property name="url" value="jdbc:mysql://localhost:3306/mydb"></property>
    	<property name="username" value="root"></property>
    	<property name="password" value="root"></property>
    </bean>

    <bean id="sessionFactory"
    	class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    	<property name="dataSource">
    		<ref bean="dataSource" />
    	</property>
    	<property name="hibernateProperties">
    		<props>
    		   <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
    		   <prop key="hibernate.show_sql">true</prop>
    		   [color=red]<prop key="hibernate.connection.autocommit">false</prop>[/color]
    		</props>
    	</property>
    	<property name="mappingResources">
    		<list>
    			<value>vo/Student.hbm.xml</value>
    		</list>
    	</property>
    </bean>
</beans>




public class StudentDaoImpl extends HibernateDaoSupport implements StudentDao{
public void save(Student stu) {
this.getHibernateTemplate().save(stu); //问题:为什么上面设置autocommit为false,但这里还是会提交到数据库中
}
}



问题补充:
谢谢你的回复。

我用的是MySQL,但我发现即使加个声明式事务,调用getHibernateTemplate().save(stu)方法还是会插入到数据库中。以下是我的事务配置:
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
    </bean>
   
    <bean id="studentDaoProxy"  class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="transactionManager">
           <ref bean="transactionManager"/>
        </property>
        <property name="transactionAttributes">
            <props>
                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
        <property name="target">
<ref local="studentDao"/>
        </property>
    </bean>

   
<bean id="studentDao" class="vo.StudentDaoImpl">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>

这是我的测试类:

public class Test {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
StudentDao studentDao = (StudentDao)context.getBean("studentDaoProxy");
//添加操作
Student student = new Student();
student.setName("测试");
studentDao.save(student);
        }
}
2008年6月13日 14:48

2个答案 按时间排序 按投票排序

0 0

采纳的答案

hibernate事务是依赖与数据库事务的,调用save方法后SQL语句已经发送到数据库,所以提交到数据库很正常,如果你应用了事务但是autocommit为false才不会保存到数据库,前提是你的表是InnoDB(支持事务),如果是MyISAM(不支持事务)的话不管你是否应用了事务只要调用save方法数据库中都会存入记录

2008年6月13日 17:35
0 0

回答2:如果你save了对象,那么hibernate并没有把数据存入数据库,这时这个对象存在内存中,这时你如果使用get或者load方法取这个对象,你可以取到,也许你会误认为,这个对象存在数据库中,其实它还在内存中,hibernate回在合适的时候(一般是内存中的临时对象和持久化对象达到一定容量)把内存中的持久化对象同步到数据库中。如果你想强行把内存中的数据同步到数据库中,可以使用那个session的flush方法。

2008年6月16日 10:31

相关推荐

    hibernate.properties

    #hibernate.connection.provider_class org.hibernate.connection.DriverManagerConnectionProvider #hibernate.connection.provider_class org.hibernate.connection.DatasourceConnectionProvider #hibernate....

    Hibernate的配置文件

    &lt;property name="hibernate.connection.autocommit"&gt;false ``` 3. **方言(Dialect)**:指定数据库对应的Hibernate方言,确保SQL语句与数据库兼容。例如: ```xml &lt;property name="hibernate.dialect"&gt;org....

    Hibernate配置文件.pdf

    - `hibernate.connection.autocommit`: 设置是否开启自动提交,默认为`false`。 - `mapping resource`: 指定映射文件的位置,例如`cn/Customers.hbm.xml`。 3. **映射文件(.hbm.xml)**: - 映射文件定义了Java...

    jbpm_jboss+oracle

    - 其他属性如`hibernate.connection.autocommit`、`hibernate.max_fetch_depth`、`hibernate.hbm2ddl.auto`和`hibernate.show_sql`也应根据实际需求进行调整。 接下来,需要在jbpm-installer目录下的standalone....

    Spring3.0+Struts2.1+ Hibernate3.5融合步骤

    &lt;property name="hibernate.connection.autocommit"&gt;true &lt;!-- c3p0 --&gt; &lt;property name="hibernate.connection.provider_class"&gt;org.hibernate.connection.C3P0ConnectionProvider &lt;property name="hibernate....

    tomcat下面配置连接池

    - **hibernate.connection.autocommit**: 自动提交模式。 - **hibernate.show_sql**: 是否显示SQL语句。 - **connection.useUnicode/connection.characterEncoding**: 字符编码。 - **hibernate.format_sql**: 格式...

    sqlserver数据库SSH配置1

    * `&lt;prop key="hibernate.connection.autocommit"&gt;false&lt;/prop&gt;`:指定是否自动提交数据库事务。 * `&lt;prop key="hibernate.hbm2ddl.auto"&gt;update&lt;/prop&gt;`:指定是否自动更新数据库 schema。 四、结论 SQLServer ...

    基于ssh的proxool连接池配置

    6. `hibernate.connection.autocommit`设置为`true`,表示每个数据库操作都在其自己的事务中自动提交。 7. `hibernate.show_sql`设置为`true`,这样Hibernate会打印出执行的SQL语句,方便调试。 8. 关键配置项`...

    Flume监听oracle表增量的步骤详解

    a1.sources.r1.hibernate.connection.autocommit = true a1.sources.r1.hibernate.dialect = org.hibernate.dialect.Oracle10gDialect a1.sources.r1.hibernate.connection.driver_class = oracle.jdbc.driver....

    hibernate保存不到数据1

    描述提到了一个具体的解决方案,即通过在`hibernate.cfg.xml`配置文件中设置`connection.autocommit`属性为`true`来解决数据无法持久化的问题。 在深入讨论这个问题之前,首先我们需要理解Hibernate是什么。...

    Struts spring hibernate整合

    &lt;property name="hibernate.connection.autocommit"&gt;false ``` 在整合SSH框架时,还需要注意依赖库的完整性和版本兼容性,避免出现如`GenericObjectPool`找不到等问题,确保所有必需的JAR包都已添加到项目的类路径...

    Myeclipse8.5SSH配置

    &lt;prop key="hibernate.connection.autocommit"&gt;true &lt;prop key="hibernate.show_sql"&gt;true ``` 接着,配置`HibernateTemplate`,它是Spring与Hibernate整合的关键组件,允许我们在服务层直接操作数据库: `...

    applicationContext.xml 详细配置

    &lt;prop key="hibernate.connection.autocommit"&gt;true &lt;!-- 显示 sql 语句 --&gt; &lt;prop key="hibernate.show_sql"&gt;false &lt;!-- 添加 1 结束 --&gt; &lt;value&gt;org/我的项目(目录)/vo(自定义包)/如:User.hbm.xml ...

    com.microsoft.sqlserver.jdbc.SQLServerException: 只进结果集不支持请求的操作 解决方案

    这可以通过在Hibernate配置文件中设置`hibernate.connection.autocommit`属性为`false`,并在查询前手动设置事务,然后通过`Session`的`createSQLQuery()`或`createQuery()`方法附加`ResultSet.TYPE_SCROLL_...

    客户关系管理系统框架搭建(二)

    &lt;property name="hibernate.connection.autocommit"&gt;true &lt;property name="hibernate.dialect"&gt;org.hibernate.dialect.MySQL5Dialect &lt;property name="hibernate.hbm2ddl.auto"&gt;update ...

    Struts2+hibernate3

    在使用`Hibernate3`进行数据保存时,如果数据库没有反映出保存的数据,这可能是由于缺少了`&lt;property name="connection.autocommit"&gt;true&lt;/property&gt;`配置。`Hibernate`的事务处理是基于数据库事务的,当`autocommit...

    1-SSH综合项目—我的智囊团(介绍及环境搭建)-笔记.doc

    &lt;prop key="hibernate.connection.autocommit"&gt;true &lt;!-- 显示 SQL 语句 --&gt; &lt;prop key="hibernate.show_sql"&gt;true ``` 以上步骤详细介绍了如何搭建SSH框架的基础开发环境,并通过实际案例“我的智囊团”来...

    Struts2.1.6+Spring2.5.6+Hibernate3.3.1框架整合常见错误

    在使用Struts2.1.6、Spring2.5.6与Hibernate3.3.1进行框架整合时,开发者经常会遇到一些常见的问题。这些问题可能会导致程序无法正常运行或出现异常行为。下面我们将针对这些常见错误进行详细的分析,并提供可能的...

    MySQL 5.6 & 5.7最优配置文件模板(my.ini)

    整理了一份最新基于MySQL 5.6和5.7的配置文件模板,基本上可以说覆盖90%的调优选项,用户只需根据自己的服务器配置稍作修改即可,如InnoDB缓冲池的大小、IO能力(innodb_buffer_pool_size,...autocommit = 0 …………

    自动提交:对于Java程序员,设置一个新的环境

    开发环境以及工具配置 github自动提交 在linux服务器上面配置git并且每日提交, 让github绿油油 # 安装git ...chmod +x autocommit.sh ./autocommit.sh # 定时任务 crontab -e 0 6 * * * sh /root/g

Global site tag (gtag.js) - Google Analytics