Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以列表作为参数的Hibernate bulkUpdate()_Java_Hibernate_Jpql - Fatal编程技术网

Java 以列表作为参数的Hibernate bulkUpdate()

Java 以列表作为参数的Hibernate bulkUpdate(),java,hibernate,jpql,Java,Hibernate,Jpql,我有一个类似这样的问题: @Entity @Table(name="sparkteams") @NamedQueries({ @NamedQuery(name = SparkTeam.DELETE_TEAMS , query = "delete from SparkTeam s" + " where s.acctId=? and s.teamName in (?)") }) public class SparkTe

我有一个类似这样的问题:

@Entity
@Table(name="sparkteams")
@NamedQueries({
        @NamedQuery(name = SparkTeam.DELETE_TEAMS
                , query = "delete from SparkTeam s" +
                " where s.acctId=? and s.teamName in (?)")
})

public class SparkTeam implements Persistent{
    private Long acctId;
    private String teamName;
    // entity class definitions
}
在我的DAO类中,我有以下方法:

@Override
@Modifying
public void deleteTeams(Long acctId, List<String> teams) {
    getHibernateTemplate().bulkUpdate(
            SparkTeam.DELETE_TEAMS,
            new Object[] {acctId, teams}
);

因此,看起来
bulkUpdate()
方法无法正确解析列表参数,我想知道正确的方法是什么。

之所以出现此错误,是因为您将命名查询的名称作为第一个参数而不是查询字符串传递。如果发送查询字符串,它也会因ClassCastException而失败。必须使用命名参数而不是“?”来绑定多个值

我认为正确的方法是通过HibernateCallback直接使用hibernate。 首先,将查询更改为使用命名参数:

" where s.acctId=:p1 and s.teamName in (:p2)")
然后将deleteTeams方法替换为:

public void deleteTeams(final Long acctId, final List<String> teams) {
        HibernateCallback<Integer> deleteCallback = new HibernateCallback<Integer>() {

        @Override
        public Integer doInHibernate(Session session)
                throws HibernateException, SQLException {

            return session.getNamedQuery(SparkTeam.DELETE_TEAMS)
                    .setParameter("p1", acctId)
                    .setParameterList("p2", teams)
                    .executeUpdate();
        }

    };
    getHibernateTemplate().execute(deleteCallback);
}
public void delete团队(最终长账户,最终列表团队){
HibernateCallback deleteCallback=新的HibernateCallback(){
@凌驾
公共整数doInHibernate(会话)
抛出HibernateeException、SQLException{
return session.getNamedQuery(SparkTeam.DELETE_团队)
.setParameter(“p1”,acctId)
.setParameterList(“p2”,团队)
.executeUpdate();
}
};
getHibernateTemplate().execute(deleteCallback);
}
public void deleteTeams(final Long acctId, final List<String> teams) {
        HibernateCallback<Integer> deleteCallback = new HibernateCallback<Integer>() {

        @Override
        public Integer doInHibernate(Session session)
                throws HibernateException, SQLException {

            return session.getNamedQuery(SparkTeam.DELETE_TEAMS)
                    .setParameter("p1", acctId)
                    .setParameterList("p2", teams)
                    .executeUpdate();
        }

    };
    getHibernateTemplate().execute(deleteCallback);
}