如何从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: not‘t extract ResultSet“。
有什么想法或例子吗?
ad:我在后面使用Oracle12c。
发布于 2014-11-08 19:44:26
好的,经过几个小时的深入研究,我发现了我的问题。
首先,我的sql脚本包含未转义的“(双引号),解决方案是对这些字符进行转义。
然而,最棘手的事情是我的所有sql文件都包含\uFEFF符号。称为BOM (字节顺序标记)。我的Oracle驱动程序似乎不能正确处理BOM。如上所述,这导致了\n异常。
最后,我可以调用
Query query = em.createNativeQuery(sql);
query.executeUpdate();以创建我的物化视图。经验教训:注意sql文件中无法识别的符号。
https://stackoverflow.com/questions/26805538
复制相似问题