ssh 数据删不掉,可以增加,修改,查询。dao层,biz层接口 UsersDao ,UsersBiz 省略UsersDao 实现类:
public class UsersDaoHiberImpl extends HibernateDaoSupport implements UsersDao{
public Users get(int id)
{
return (Users)super.getHibernateTemplate().get(Users.class, id);
}
public void del(Users u)
{
super.getHibernateTemplate().delete(u);
}其它方法省略
}UsersBiz 实现类
public class UsersBizImpl implements UsersBiz {
UsersDao usersDao=null;
public void setUsersDao(UsersDao usersDao) {
this.usersDao = usersDao;
}
public void del(Users u) {
               this.usersDao.del(u);
}
public Users get(int id) {
return  this.usersDao.get(id);
}其它方法省略
}UsersAction 类
public class UsersAction extends DispatchAction {
UsersBiz usersBiz=null;
public void setUsersBiz(UsersBiz usersBiz) {
this.usersBiz = usersBiz;
}
public ActionForward get(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
Users condition1=new Users();
List list1=this.usersBiz.search(condition1);
System.out.println("删除前有数据 "+list1.size()+"条");

UsersForm userForm=(UsersForm)form;
int id=userForm.getId();  //得到id
Users user =(Users)this.usersBiz.get(id); //加载id
this.usersBiz.del(user);  //删除

Users condition2=new Users();
List list2=this.usersBiz.search(condition2);
System.out.println("删除后有数据"+list2.size()+"条");
return null;
}
}
spring配置文件部分:
        <bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation"
value="classpath:hibernate.cfg.xml">
</property>
</bean> 
<bean id="usersDao" class="com.ssh.UsersDaoHiberImpl">
   <property name="sessionFactory" ref="sessionFactory"></property>
</bean>

<bean id="usersBiz" class="com.ssh.UsersBizImpl">
   <property name="usersDao" ref="usersDao"> </property>
</bean>

<bean name="/users" class="com.ssh.UsersAction">
   <property name="usersBiz" ref="usersBiz"></property>
</bean> 数据库中有四条数据
运行后控制台打印:
删除前有数据4条
删除后有数据3条
把Tomcat停止后,在sql server2005中用查询语句查,结果还是4条数据,怎么删不掉啊?

解决方案 »

  1.   

    写了下面的也没效果,写错了吗
      <bean id="myHibTransationManamger" 
           class="org.springframework.orm.hibernate3.HibernateTransactionManager">
           <property name="sessionFactory" ref="sessionFactory"></property>
       </bean> 
       
      <tx:advice id="txAdvice" transaction-manager="myHibTransationManamger">
      <tx:attributes>
        <tx:method name="get" propagation="REQUIRED"/>
        <tx:method name="del" propagation="REQUIRED"/>
      </tx:attributes>
    </tx:advice>
    <aop:config>
       <aop:pointcut id="bizMethods"  expression="execution(* com.*.*(..))"/>
       <aop:advisor advice-ref="txAdvice" pointcut-ref="bizMethods"/>
    </aop:config>
      

  2.   

    commit,那 UserForm 中的 getId() 可以取得到吗?配置文件中加上一句:<tx:method name="*" propagation="SUPPORTS" read-only="true"/>
    看看可以不?
      

  3.   

    <tx:advice id="txAdvice" transaction-manager="txManager">
      <tx:attributes>
        <tx:method name="get*" read-only="true" propagation="NOT_SUPPORTED"/>
        <tx:method name="*"/>
      </tx:attributes>
    </tx:advice>
    修改成这样看看
      

  4.   

    5楼 7楼试过了 还是没效果
    tomcat停止之前在sql server中查询数据,什么也查不出来
    tomcat停止以后在sql server中可以查出来,但还是4条,没有删掉
      

  5.   

    看看你USERDAO 里封装的操作数据方法,看看delete的删除是否提交
      

  6.   

    public void del(Users u) 

       super.getHibernateTemplate().delete(u); 
    }
      

  7.   

    我不知道你具体代码怎样,但是据我了解,getHibernateTemplate().delete(u); hibernate的delete方法里的参数  u ,必须是有主键的,你如果u.getId()(不知道你是不是这样写的)
    得不到具体值的话,那么删除肯定失败.你可以再delete方法中试试如下方法,以确定你的u是否是正确的public void del(Users u) 

       Users u = getHibernateTemplate().load或者get一个,你必须确定能加载到一个
        然后,实现删除,
      super.getHibernateTemplate().delete(u); } 
    这么做的理由,load一个user后,主键肯定存在,所以删除按理来说是成功的,如果u有主键,但删除失败,说明,你的事务没提供!!