我们正在使用以下SQL语句并通过createSQLQuery()执行 - list()而不是executeUpdate()
a)从员工中删除nbr in('1','2','3')
b)从emp_details中删除empNbr =(从员工中选择nbr,其中name ='Somu')
这两个查询在SQL Client中都能正常工作,但会抛出以下异常
for i in $(git branch | sed 's/\*//'); do git checkout $i; git ls-files | grep -q YOURFILE ; if [ $? -eq 0 ] ; then echo "File found in branch: $i"; fi; done
查询没有问题,因为查询在SQL客户端中工作正常。
问题:
1)我们可以通过createSQLQuery() - list()传递或执行删除脚本吗? 2)使用createSQLQuery() - list()删除脚本是错误的吗?
答案 0 :(得分:2)
如果要执行删除语句,则必须在executeUpdate()
返回的查询上调用list
而不是createSQLQuery()
!
答案 1 :(得分:2)
对任何更新或删除脚本使用.list()是错误的做法。
如上所述,你需要使用返回类型为int的.executeUpdate,返回受executeUpdate命令影响的行数。
SQLQuery sqlQuery = session.createSQLQuery("delete from employee where nbr in (1,2,3)");
sqlQuery.executeUpdate();
使用命名参数在查询中传递参数也是一种很好的做法。 (阅读this以供参考)