【问题标题】:Is there a way in hibernate that can manipulate many query in one String休眠中有没有一种方法可以在一个字符串中操作多个查询
【发布时间】:2016-11-21 02:53:05
【问题描述】:

我在我的网络项目中使用休眠。我在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

现在我的问题是,有没有一种方法可以一次性处理查询字符串。还是我必须将每个查询语句分开并一一执行。这就像我想在休眠中执行一个.sql 文件。

【问题讨论】:

标签: java sql postgresql hibernate


【解决方案1】:

您不能在 Hibernate 中一次运行多个本机查询。

您必须分离查询,然后单独运行它们。

在 JDBC 中也是如此。

【讨论】:

    【解决方案2】:

    所以我想出了这种代码与其他人分享。但我会检查@Pritam Banerjee 的答案是否给了我一个很好的答案。我split我的String通过“;”符号来分隔每个语句,我使用loop 一个一个地执行它。

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

    它在我身上很好用。感谢cmets和答案。欣赏它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-05
      • 2013-08-13
      相关资源
      最近更新 更多