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);
}