hiberbate4.2.5整合spring3.2.5和struts2.3.15无法对数据库做出操作
在整合完最新版的ssh后我测试用hibernate的getCurrentSession()取得Session后的save(),update()和delete()时,我发现页面上虽然能查出更新后的结果,但数据库里却未进行更新,而且后台未打印出sql语句,三个方法只有save()发出了insert语句,我原本以为是缓存问题,但清空缓存后还是一样,delete()和update()无法发出sql语句,这是为什么,我很奇怪,另外,我在更新和删除前先调用了load()把根据id把数据从数据库中查了出来,但只发出了select语句,随后执行update()和delete()却像没有作用一样,我把load()换成了get()也是一样的效果,求高人指点这到底是神马原因,为何发不出sql语句,万分感谢!另外,我的事务配置也做了,包括设置了aop:config和aop:advice,事务加在了service,但就是不能删除和修改数据库中的数据,也就是不能发出sql语句,但是select和insert却可以。求解释 SSH --------------------编程问答-------------------- 事物没有提交吧,flush()一下试试 --------------------编程问答-------------------- 没提交? --------------------编程问答-------------------- @_@怎么可能没提交 --------------------编程问答-------------------- 这是我的事务配置:
<bean id"txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory">
</bean>
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="save*"/>
<tx:method name="update*"/>
<tx:method name="delete*"/>
<tx:method name="*" propagation="supports"/>
</tx:attributes>
</tx:advice>
<aop:config proxy-target-class="true">
<aop:advisor pointcut="execution(* com.demos.service..*.*Impl.* (..))"
advice-ref="txAdvice"/>
</aop:config>
我的事务加在了service层,但只有查询和插入数据能发出sql语句,在web.xml中我也把OpenSessionInView这个类配置在了struts2的易做图之前,可还是没有用 --------------------编程问答-------------------- 我的dao层相关代码如下
private SessionFactory sessionFactory;
@Autowired
public void setSessionFactory(SessionFactory sessionFactory){this.sessionFactory=sessionFactory;}
public Session getCurrentSession(){
return this.sessionFactory.getCurrentSession();
}
public void update(User user){
this.getCurrentSession().update(user);
}
public void delete(int id){
this.getCurrentSession().delete(findUser(id));
public User findUser(int id){
return (User)this.getCurrentSession().load
(User.class,id);}
--------------------编程问答-------------------- <!-- 事务的传播特性 -->
<tx:advice id="txadvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="create" propagation="REQUIRED" />
<!--hibernate4必须配置为开启事务 否则 getCurrentSession()获取不到-->
<tx:method name="*" propagation="REQUIRED" read-only="true" />
</tx:attributes>
</tx:advice>
试试这样呢?那个create是创建的方法create(),然后在dao里面用getSession().save(user);方法。。
补充:Java , Java EE