首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

利用spring中this.getHibernateTemplate().execute()进行批量删除不成功,各位帮忙解决下?解决方法

2012-01-15 
利用spring中this.getHibernateTemplate().execute()进行批量删除不成功,各位帮忙解决下?本人用struts 2.1

利用spring中this.getHibernateTemplate().execute()进行批量删除不成功,各位帮忙解决下?
本人用struts 2.1+spring2.5+hibernate 3.进行项目开发,需要批量删除数据,本想利用bulkUpdate方法的但是这个方法进行批量删除时用“?”表示的参数个数必须确定,所以采用this.getHibernateTemplate().execute()调用HibernateCallback()方法进行批量删除,POJO代码、DAO代码,请各位大虾指点。
数据表映射POJO类Admin源码如下:

Java code
ackage per.ssh.dao.Admin;/** * Admin entity. @author MyEclipse Persistence Tools */public class Admin implements java.io.Serializable {    // Fields    private String adminUser;    private String adminPwd;    private Integer adminLevel;    // Constructors    /** default constructor */    public Admin() {    }    /** full constructor */    public Admin(String adminUser, String adminPwd, Integer adminLevel) {        this.adminUser = adminUser;        this.adminPwd = adminPwd;        this.adminLevel = adminLevel;    }    // Property accessors    public String getAdminUser() {        return this.adminUser;    }    public void setAdminUser(String adminUser) {        this.adminUser = adminUser;    }    public String getAdminPwd() {        return this.adminPwd;    }    public void setAdminPwd(String adminPwd) {        this.adminPwd = adminPwd;    }    public Integer getAdminLevel() {        return this.adminLevel;    }    public void setAdminLevel(Integer adminLevel) {        this.adminLevel = adminLevel;    }}

.hbm.xml文档如下:
XML code
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!--     Mapping file autogenerated by MyEclipse Persistence Tools--><hibernate-mapping>    <class name="per.ssh.dao.Admin.Admin" table="admin" schema="dbo" catalog="mpr">        <id name="adminUser" type="java.lang.String">            <column name="admin_user" length="50" />            <generator class="assigned" />        </id>        <property name="adminPwd" type="java.lang.String">            <column name="admin_pwd" length="50" not-null="true" />        </property>        <property name="adminLevel" type="java.lang.Integer">            <column name="admin_level" not-null="true" />        </property>    </class></hibernate-mapping>

DAO文件中的具体方法如下:
Java code
public void deleteByIds(final Object[] ids)throws DAOException{        for(int i=0;i<ids.length;i++){            System.out.println(ids[i]);        }        final String queryString="delete Admin where adminUser in (:ids)";        try{            this.getHibernateTemplate().execute(new HibernateCallback() {                public Object doInHibernate(Session session) {                    Query query = session.createQuery(queryString);                    query.setParameterList("ids", ids);                    return query.executeUpdate();                }            });        }        catch(Exception ex){            throw new DAOException(ex);        }        /*for(int i=0;i<ids.length;i++){            try{                Admin admin=(Admin)this.getHibernateTemplate().get(Admin.class,ids[i]);                if(admin!=null){                    this.getHibernateTemplate().delete(admin);                }            }            catch(Exception ex){                throw new DAOException(ex);            }                    }*/    } 


Services的代码如下:
Java code
public boolean deleteByIds(String ids) {        // TODO Auto-generated method stub        if(!ids.equals("")){            String[] IDs=ids.split(",");            try{                adminDAO.deleteByIds(IDs);                return true;            }            catch(DAOException ex){                ex.printStackTrace();                return false;            }        }        else{            return false;        }    }

action中的方法如下:
Java code
public String del(){        String ids=this.getParameter("ids");        boolean flag=adminService.deleteByIds(ids);//该service注入绝对没有错误,因为其他方法都能正确执行        if(flag){            this.addResult(SUCCESS,"数据删除成功!",null);        }        else{            this.addResult(ERROR,"删除数据出现异常!",null);        }        return SUCCESS;    }

spring的applicationContext.xml配置文件如下:
XML code
<?xml version="1.0" encoding="UTF-8"?><beans    xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:p="http://www.springframework.org/schema/p"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">    <bean id="dataSource"        class="org.apache.commons.dbcp.BasicDataSource">        <property name="driverClassName"            value="com.microsoft.sqlserver.jdbc.SQLServerDriver">        </property>        <property name="url"            value="jdbc:sqlserver://localhost:1433;databaseName=mpr">        </property>        <property name="username" value="sa"></property>        <property name="password" value="tj@zjut09"></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.SQLServerDialect                </prop>            </props>        </property>        <property name="mappingResources">            <list>                <value>per/ssh/dao/Admin/Admin.hbm.xml</value>            </list>        </property>    </bean>    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">    <property name="sessionFactory" ref="sessionFactory"/>    </bean></beans>

我以前都是用这种批量删除方法的,都没有出现问题,这次却出现了问题不知道怎么回事?当然了,也可以通过我在DAO文件注释的那种方法进行删除,但是如果数据量过大的,就会重复多次的打开数据库效率太低了,请各位大虾帮忙检查。

[解决办法]
报错信息呢 ?
[解决办法]
为什么要 return query.executeUpdate();啊
[解决办法]
信息贴出来哦
[解决办法]
delete Admin where adminUser in (:ids)



delete后面不需要from嗎?反正mysql里面是需要的,不知道sqlserver是什么情况。
[解决办法]
大批量操作,JDBC吧,简单直接,
hibernate只适合简单对象操作。
[解决办法]

探讨
引用:

delete Admin where adminUser in (:ids)

delete后面不需要from嗎?反正mysql里面是需要的,不知道sqlserver是什么情况。

我使用的是HQL语句,它的delete语句就是这样写的

热点排行