Java hibernate中有没有一种方法可以在一个字符串中处理多个查询
我在我的web项目中使用hibernate。我在Java hibernate中有没有一种方法可以在一个字符串中处理多个查询,java,sql,postgresql,hibernate,Java,Sql,Postgresql,Hibernate,我在我的web项目中使用hibernate。我在createSQLQuery(queryString)中执行这行String。下面是我在queryString中分配的值: DROP TABLE monthlyevaluatedbudgettabletemp; DROP TABLE monthlyadjustedbudgettabletemp; CREATE TABLE monthlyevaluatedbudgettabletemp (budgetid bigint NOT NULL, ap
createSQLQuery(queryString)
中执行这行String
。下面是我在queryString
中分配的值:
DROP TABLE monthlyevaluatedbudgettabletemp;
DROP TABLE monthlyadjustedbudgettabletemp;
CREATE TABLE monthlyevaluatedbudgettabletemp (budgetid bigint NOT NULL,
approvedbudget numeric(19,2),
april numeric(19,2),
august numeric(19,2),
budgetforyear bigint NOT NULL,
december numeric(19,2),
february numeric(19,2),
january numeric(19,2),
july numeric(19,2),
june numeric(19,2),
march numeric(19,2),
may numeric(19,2),
november numeric(19,2),
october numeric(19,2),
september numeric(19,2),
branchid integer,
accountid bigint,
budgetlastyear bigint);
CREATE TABLE monthlyadjustedbudgettabletemp (adjustedid bigint NOT NULL,
april numeric(19,2),
august numeric(19,2),
december numeric(19,2),
february numeric(19,2),
january numeric(19,2),
july numeric(19,2),
june numeric(19,2),
march numeric(19,2),
may numeric(19,2),
november numeric(19,2),
october numeric(19,2),
september numeric(19,2),
yeartodatemonth character varying(255),
budgetid bigint);
INSERT INTO monthlyevaluatedbudgettabletemp SELECT * FROM monthlyevaluatedbudgettable where budgetforyear=2017;
INSERT INTO monthlyadjustedbudgettabletemp SELECT a.* from monthlyadjustedbudgettable as a join monthlyevaluatedbudgettable as e on a.budgetid=e.budgetid where e.budgetforyear = 2017
UPDATE monthlyevaluatedbudgettabletemp SET budgetforyear=2017,budgetlastyear=2016,april=0.00,approvedbudget=0.00,august=0.00,february=0.00,january=0.00,july=0.00,june=0.00,march=0.00,may=0.00,november=0.00,october=0.00,september=0.00,december=0.00;
UPDATE monthlyadjustedbudgettabletemp SET january=0.00,february=0.00,march=0.00,april=0.00,may=0.00,june=0.00,july=0.00,august=0.00,september=0.00,november=0.00,
october=0.00,december=0.00;
现在,当我使用createSQLQuery(queryString.executeUpdate()运行它时代码>。我遇到了这种错误
org.hibernate.exception.SQLGrammarException: could not execute native bulk manipulation query
现在我的问题是,有没有一种方法可以在一次性字符串中操作查询。或者我必须将每个查询语句分开并逐个执行。这就像我想在hibernate中执行一个.sql
文件 在Hibernate中不能一次运行多个本机查询
您必须分离查询,然后分别运行它们
在JDBC中也可以这样做。在Hibernate中不能一次运行多个本机查询
您必须分离查询,然后分别运行它们
在JDBC中也是这样做的。所以我提出了这种代码与其他人共享。但是我会检查@Pritam Banerjee的答案,因为它给了我一个很好的答案。我split
myString
by”;“符号来分隔每个语句,我使用循环来逐个执行它
String[] splitQueryStr = queryString.split(";");
for (String queryStr : splitQueryStr) {
try {
getSession().beginTransaction();
getSession().createSQLQuery(queryStr).executeUpdate();
getSession().getTransaction().commit();
} catch (HibernateException he) {
getSession().getTransaction().rollback();
he.printStackTrace();
throw new HibernateException("Hibernate Error");
} catch (Exception e) {
getSession().getTransaction().rollback();
throw new Exception();
}
}
它在我身上很管用。谢谢你的评论和回答。非常感谢。所以我想出了这种代码与其他人分享。但是我会检查@Pritam Banerjee的答案,因为它给了我一个很好的答案。我split
myString
by”;“符号来分隔每个语句,我使用循环来逐个执行它
String[] splitQueryStr = queryString.split(";");
for (String queryStr : splitQueryStr) {
try {
getSession().beginTransaction();
getSession().createSQLQuery(queryStr).executeUpdate();
getSession().getTransaction().commit();
} catch (HibernateException he) {
getSession().getTransaction().rollback();
he.printStackTrace();
throw new HibernateException("Hibernate Error");
} catch (Exception e) {
getSession().getTransaction().rollback();
throw new Exception();
}
}
它在我身上很管用。谢谢你的评论和回答。非常感谢。我想您需要逐个运行这些查询。为什么要使用hibernate进行此类操作?请使用JDBC,我想您需要逐个运行这些查询。为什么要使用hibernate进行此类操作?请使用JDBC