-
请教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个答案 按时间排序 按投票排序
-
采纳的答案
hibernate事务是依赖与数据库事务的,调用save方法后SQL语句已经发送到数据库,所以提交到数据库很正常,如果你应用了事务但是autocommit为false才不会保存到数据库,前提是你的表是InnoDB(支持事务),如果是MyISAM(不支持事务)的话不管你是否应用了事务只要调用save方法数据库中都会存入记录
2008年6月13日 17:35
-
回答2:如果你save了对象,那么hibernate并没有把数据存入数据库,这时这个对象存在内存中,这时你如果使用get或者load方法取这个对象,你可以取到,也许你会误认为,这个对象存在数据库中,其实它还在内存中,hibernate回在合适的时候(一般是内存中的临时对象和持久化对象达到一定容量)把内存中的持久化对象同步到数据库中。如果你想强行把内存中的数据同步到数据库中,可以使用那个session的flush方法。
2008年6月16日 10:31
相关推荐
#hibernate.connection.provider_class org.hibernate.connection.DriverManagerConnectionProvider #hibernate.connection.provider_class org.hibernate.connection.DatasourceConnectionProvider #hibernate....
<property name="hibernate.connection.autocommit">false ``` 3. **方言(Dialect)**:指定数据库对应的Hibernate方言,确保SQL语句与数据库兼容。例如: ```xml <property name="hibernate.dialect">org....
- `hibernate.connection.autocommit`: 设置是否开启自动提交,默认为`false`。 - `mapping resource`: 指定映射文件的位置,例如`cn/Customers.hbm.xml`。 3. **映射文件(.hbm.xml)**: - 映射文件定义了Java...
- 其他属性如`hibernate.connection.autocommit`、`hibernate.max_fetch_depth`、`hibernate.hbm2ddl.auto`和`hibernate.show_sql`也应根据实际需求进行调整。 接下来,需要在jbpm-installer目录下的standalone....
<property name="hibernate.connection.autocommit">true <!-- c3p0 --> <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider <property name="hibernate....
- **hibernate.connection.autocommit**: 自动提交模式。 - **hibernate.show_sql**: 是否显示SQL语句。 - **connection.useUnicode/connection.characterEncoding**: 字符编码。 - **hibernate.format_sql**: 格式...
* `<prop key="hibernate.connection.autocommit">false</prop>`:指定是否自动提交数据库事务。 * `<prop key="hibernate.hbm2ddl.auto">update</prop>`:指定是否自动更新数据库 schema。 四、结论 SQLServer ...
6. `hibernate.connection.autocommit`设置为`true`,表示每个数据库操作都在其自己的事务中自动提交。 7. `hibernate.show_sql`设置为`true`,这样Hibernate会打印出执行的SQL语句,方便调试。 8. 关键配置项`...
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.cfg.xml`配置文件中设置`connection.autocommit`属性为`true`来解决数据无法持久化的问题。 在深入讨论这个问题之前,首先我们需要理解Hibernate是什么。...
<property name="hibernate.connection.autocommit">false ``` 在整合SSH框架时,还需要注意依赖库的完整性和版本兼容性,避免出现如`GenericObjectPool`找不到等问题,确保所有必需的JAR包都已添加到项目的类路径...
<prop key="hibernate.connection.autocommit">true <prop key="hibernate.show_sql">true ``` 接着,配置`HibernateTemplate`,它是Spring与Hibernate整合的关键组件,允许我们在服务层直接操作数据库: `...
<prop key="hibernate.connection.autocommit">true <!-- 显示 sql 语句 --> <prop key="hibernate.show_sql">false <!-- 添加 1 结束 --> <value>org/我的项目(目录)/vo(自定义包)/如:User.hbm.xml ...
这可以通过在Hibernate配置文件中设置`hibernate.connection.autocommit`属性为`false`,并在查询前手动设置事务,然后通过`Session`的`createSQLQuery()`或`createQuery()`方法附加`ResultSet.TYPE_SCROLL_...
<property name="hibernate.connection.autocommit">true <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect <property name="hibernate.hbm2ddl.auto">update ...
在使用`Hibernate3`进行数据保存时,如果数据库没有反映出保存的数据,这可能是由于缺少了`<property name="connection.autocommit">true</property>`配置。`Hibernate`的事务处理是基于数据库事务的,当`autocommit...
<prop key="hibernate.connection.autocommit">true <!-- 显示 SQL 语句 --> <prop key="hibernate.show_sql">true ``` 以上步骤详细介绍了如何搭建SSH框架的基础开发环境,并通过实际案例“我的智囊团”来...
在使用Struts2.1.6、Spring2.5.6与Hibernate3.3.1进行框架整合时,开发者经常会遇到一些常见的问题。这些问题可能会导致程序无法正常运行或出现异常行为。下面我们将针对这些常见错误进行详细的分析,并提供可能的...
整理了一份最新基于MySQL 5.6和5.7的配置文件模板,基本上可以说覆盖90%的调优选项,用户只需根据自己的服务器配置稍作修改即可,如InnoDB缓冲池的大小、IO能力(innodb_buffer_pool_size,...autocommit = 0 …………
开发环境以及工具配置 github自动提交 在linux服务器上面配置git并且每日提交, 让github绿油油 # 安装git ...chmod +x autocommit.sh ./autocommit.sh # 定时任务 crontab -e 0 6 * * * sh /root/g