一个莫名其妙的问题,求助
在用hibernate操作数据库的时候,session.createQuery(sql).executeUpdate();使用的这个方法。。然后抛出异常:
org.hibernate.exception.SQLGrammarException: could not execute native bulk manipulation query
说明一下,我的sql语句没有问题,是一个批量插入的语句,我把后台hibernate打印的语句,放在plsql里面是可以执行的,大概插入1W多条吧。。说明不是sql语句的问题。
大侠,求解。。
[最优解释]
那你把sql贴出来吧,再把session.createQuery(sql).executeUpdate();这一句的完整代码也贴出来
[其他解释]
sql里的字段是跟实体的名称对应吗
[其他解释]
直接用的sql,跟实体无关
[其他解释]
不知道你的sql是怎么写的
建议你把createQuery换成createSQLQuery在试试
提醒一下,SQL与HQL是不一样的
[其他解释]
这个我都知道的。。sql确实没关系,执行的方法是createSQLQuery,上面我打错了。
我是先在plsql里面写的语句,确定语句可以执行了以后,才copy到代码里面的
[其他解释]
那就把createSQLQuery换成createQuery
[其他解释]
看这里
英文的解释,我看了,很容易懂的
[其他解释]
这个帖子我看过了。。。。要按照里面的方法试过了。。本来我就是createSQLQuery,按照这个帖子说的,改成了createQuery,还是不行。。
[其他解释]
sql语句
String sql =
"insert into ia_generalledger\n" +
" select ia_generalledger_seq.nextval, --id\n" +
" a.stockorgid, " +
" a.styleid, " +
" a.fiscal_year, " +
" a.fiscal_month, " +
" a.innum, " +
" a.inamount, " +
" a.outnum, " +
" a.outamount, " +
" a.num, " +
" a.price, " +
" a.amount, " +
" null,\n" +
" null,\n" +
" null,\n" +
" null,\n" +
" null,\n" +
" null,\n" +
" null,\n" +
" null,\n" +
" null,\n" +
" null,\n" +
" null,\n" +
" null,\n" +
" null,\n" +
" null,\n" +
" null,\n" +
" a.orgid,\n" +
" null,\n" +
" null,\n" +
" null,\n" +
" a.ornacode\n" +
"\n" +
" from (select h.org_id orgid,\n" +
"\n" +
"\n" +
" h.fiscal_year fiscal_year,\n" +
" h.fiscal_month fiscal_month,\n" +
"\n" +
" h.stock_org_id stockorgid,\n" +
"\n" +
" l.style_id styleid,\n" +
"\n" +
" l.num as innum,\n" +
" l.amount inamount,\n" +
" 0.0 outnum,\n" +
" 0.0 outamount,\n" +
" l.num as num,\n" +
" l.price as price,\n" +
" l.amount as amount,\n" +
" l.orna_code ornacode\n" +
" from ia_ia_bill_head h\n" +
"\n" +
" inner join ia_ia_bill_line l on h.id = l.head_id\n" +
"\n" +
" where l.approvaluserid is null\n" +
"\n" +
" and h.fiscal_year = '2010'\n" +
" and h.fiscal_month = '7'\n" +
" and h.stock_org_id = " +stockOrgId+
" and h.org_id = " + Common.getLoginOrg().getOrgId()+
" and h.transceiver_flag='1'\n" +
" order by h.CREATEDATE, l.id\n" +
" ) a;";
;
this.commonDAO.executeSql(sql);
commonDAO的executeSql方法
public int executeSql(String sql) throws SqlOperationException {
try {
Session session = getSession();
session.beginTransaction();
return session.createSQLQuery(sql).executeUpdate();
} catch (Exception e) {
e.printStackTrace();
throw new SqlOperationException(e.getMessage());
}
// return 0;
}