Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.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中有没有一种方法可以在一个字符串中处理多个查询_Java_Sql_Postgresql_Hibernate - Fatal编程技术网

Java 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

我在我的web项目中使用hibernate。我在
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
my
String
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
my
String
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