【问题标题】:How to call a CREATE MATERIALIZED VIEW statement from Java JPA environment?如何从 Java JPA 环境调用 CREATE MATERIALIZED VIEW 语句?
【发布时间】:2015-01-04 11:57:32
【问题描述】:

如何从我的 JPA 环境中调用 CREATE MATERIALIZED VIEW 语句?当前,该语句位于从应用上下文加载的文件中。我只想执行它。

我可以使用 EntityManager 来执行 sql 脚本还是应该创建一个语句?

Session session = (Session) em.getDelegate();
SessionFactoryImplementor sfi = (SessionFactoryImplementor) session.getSessionFactory();
ConnectionProvider cp = sfi.getConnectionProvider();
Connection connection = cp.getConnection();
Statement statement = connection.createStatement();
statement.execute(sql);

我试过了,但刚刚收到“缺少标识符\n”。也许这是因为我的陈述以新行开头,但这不应该是问题。脚本本身没问题,例如在由 SQL*Plus 执行时可以工作。

另外我也试过了

em.createNativeQuery(sql);

但收到“javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet”。

有什么想法或例子吗?

ad:我在后面使用 Oracle 12c。

【问题讨论】:

    标签: java hibernate jpa entitymanager materialized-views


    【解决方案1】:

    好的,经过几个小时的深入了解,我发现了我的问题。

    首先,我的 sql 脚本包含未转义的 "(双引号)。解决方案是转义这些字符。

    尽管如此,最棘手的是我所有的 sql 文件都包含 \uFEFF 符号。称为 BOM(字节顺序标记)。看来我的 Oracle 驱动程序无法正确处理 BOM。这导致了上面提到的\n异常。

    终于可以打电话了

    Query query = em.createNativeQuery(sql);
    query.executeUpdate();
    

    为了创建我的物化视图。经验教训:注意 sql 文件中无法识别的符号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-18
      • 2021-10-25
      • 1970-01-01
      • 2020-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多