我写了一个小的ssh的demo,在tomcat下配置好后,启动没有报任何错误,service中用到hibernatetemplate,是用spring注入进去的,使用save方法想保存对象,控制台已经显示输出了insert语句,但数据库为插入任何记录.用debug查看hibernatetemplate,sessionFactory都有取到对象,但就是插入不了记录.帮忙分析下,是什么原因呢?
有没有遇到这种情况解决过的?
应该是没有配置事务吧,在你的save方法,上下各加一行,把save方法包住,如下:
[code="java"] getHibernateTemplate().getSessionFactory().openSession().beginTransaction();
getHibernateTemplate().save(transientInstance);
getHibernateTemplate().getSessionFactory().openSession().beginTransaction().commit();
[/code]
如果数据库里有了,那就说明确实是事务配置的问题。上面的代码只是帮你定位错误,千万不要这么用。
之后的请查下spring事务配置,下面是我的spring配置文件片段:
[code="java"]
class="org.springframework.jndi.JndiObjectFactoryBean">
class="org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter">
<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.DB2390Dialect
</prop>
<prop key="show_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>dm/domain/VehicleType.hbm.xml</value>
<value>dm/domain/Vehicle.hbm.xml</value>
<!--<value>dm/domain/OldVehicle.hbm.xml</value>-->
<value>dm/domain/Driver.hbm.xml</value>
<!--<value>dm/domain/OldDriver.hbm.xml</value>-->
<value>dm/domain/DispatchTask.hbm.xml</value>
</list>
</property>
</bean>
<!-- 定义事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!-- 定义事务拦截器 -->
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="del*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!-- 定义自动配置事务处理 -->
<bean id="beanNameAutoProxyCreator"
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>*Service</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
<!--<property name="proxyTargetClass" value="true" />-->
</bean>
[/code]
事务没有提交,一般在SSH整合中,可以用spring来处理事务,即在spring的配置文件中对业务层的进行事务处理。
没有提交事务吧。