论坛首页 入门技术论坛

spring+hibernate 的hibernateTemplate 的save不能提交到数据库的问题

浏览 9812 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-04-27  
我的配置文件和Dao如下,问题是save方法只能提交到缓存,并没有提交到数据库,找了很多资料都不能解决,只能放弃这种方法,挺不甘心的,网上很多人说是这样做,可是还是不行,希望能找到症结:

<bean id="SessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" singleton="true">
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
    <prop key="hibernate.show_sql">true</prop>
    <prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
    <prop key="hibernate.proxool.xml">Proxool.xml</prop>
    <prop key="hibernate.proxool.pool_alias">DBPool</prop>
    </props>
    </property>
<property name="mappingResources">
<list>
<value>hibernatePojo/Worker.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="WorkerDAO" class="hibernateDaoImpl.WorkerDAOImpl">
<property name="sessionFactory">
<ref bean="SessionFactory"/>
</property>
</bean>

<bean id="WorkerDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="TransactionManager"/>
</property>
<property name="proxyInterfaces">
<list>
<value>hibernateDaoInterface.WorkerDAO</value>
</list>
</property>
<property name="target">
<ref bean="WorkerDAO"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>

业务层
<bean id="WorkerLoginCheck" class="serviceImpl.WorkerLoginCheckImpl">
<property name="workerDAO">
<ref bean="WorkerDAOProxy"/>
</property>
</bean>

DAO代码:
public class DAOImpl extends HibernateDaoSupport implements DAO {
public boolean insertOne(Object entity) {
try {
    getHibernateTemplate().save(entity);
return true;
} catch (DataAccessException e) {
e.printStackTrace();
return false;
}

}
   发表时间:2007-04-28  
你好,我昨天出差了,回来后看到你的信息,你试一下,save后做一下flash或cmmit。
0 请登录后投票
   发表时间:2007-04-28  
不知道,你是怎么调用你的dao的。一般情况下,在事务环境中,才会提交。要不然就不要使用spring的daoSupport,直接调用申明自己的事务环境。

<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
</props>
</property>
中是不是应该增加<prop key="insert*">PROPAGATION_REQUIRED</prop>
0 请登录后投票
   发表时间:2007-04-29  
引用

<prop key="save*">PROPAGATION_REQUIRED</prop>


问题就在这里没有匹配到DAO的方法名
0 请登录后投票
   发表时间:2007-05-08  
我有试过save后做一下flash或commit,还是不灵
我最初就是用<prop key="insert*">PROPAGATION_REQUIRED</prop> 的但是还是不行,所以才改成
<prop key="save*">PROPAGATION_REQUIRED</prop>
这个方法名应该是自己的方法名insert..还是daosupport的方法名save..呢?

0 请登录后投票
   发表时间:2007-05-08  
xhy0422 写道
我有试过save后做一下flash或commit,还是不灵
我最初就是用<prop key="insert*">PROPAGATION_REQUIRED</prop> 的但是还是不行,所以才改成
<prop key="save*">PROPAGATION_REQUIRED</prop>
这个方法名应该是自己的方法名insert..还是daosupport的方法名save..呢?

虽然看不到你的serviceImpl.WorkerLoginCheckImpl代码但是猜想:
interface WorkerLoginCheck{
insertOne();
}
改名为
interface WorkerLoginCheck{
saveOne();
}
0 请登录后投票
   发表时间:2007-05-18  
我也遇到同样的问题了
请问这个问题解决了没啊?先谢谢了
0 请登录后投票
   发表时间:2007-05-28  
<prop key="hibernate.proxool.xml">Proxool.xml</prop>
<prop key="hibernate.proxool.pool_alias">DBPool</prop>

直接用JDBC试试
0 请登录后投票
   发表时间:2007-06-09  
问题解决,问题在于事务的配置不对,事务应该配置在业务层而不是持久层,配在持久层的方法上就没有意义了
持久层配置文件:
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="SessionFactory" />
</property>
</bean>
<bean id="baseTransactionProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="cha*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="del*">PROPAGATION_REQUIRED</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<bean id="WorkerDAO" class="hibernateDaoImpl.WorkerDAOImpl">
<property name="sessionFactory">
<ref bean="SessionFactory" />
</property>
</bean>
业务层配置:
<bean id="WorkerLoginCheck" parent="baseTransactionProxy">
<property name="target">
<ref local="WorkerLoginCheckTarget" />
</property>
</bean>
<bean id="WorkerLoginCheckTarget" class="serviceImpl.WorkerLoginCheckImpl">
<property name="workerDAO">
<ref bean="WorkerDAO" />
</property>
</bean>
实现方法:
serviceImpl.WorkerLoginCheckImpl中有chaWorker方法,调用WorkerDAO的insertOne方法
很久了,一直没时间尝试,拖到了今天,希望能对大家有所帮助
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics