JPA原生查询" select into outfile"

时间:2015-09-22 01:48:43

标签: java mysql hibernate jpa

我在执行" SELECT INTO outfile"时遇到问题通过JPA本机查询进行查询。

我尝试使用以下代码:

Query q = entityManager.createNativeQuery("SELECT * INTO OUTFILE '/tmp/temp.sql' FROM DummyTable");
return q.getResultList();

但我得到了这个例外:

  

引起:java.sql.SQLException:ResultSet来自UPDATE。没有数据。

似乎JPA将其视为更新,因此我将代码更改为使用execute update:

Query q = entityManager.createNativeQuery("SELECT * INTO OUTFILE '/tmp/temp.sql' FROM DummyTable");
q.executeUpdate();

现在,我又得到了一个例外。

  

引起:org.hibernate.exception.GenericJDBCException:不能   执行本机批量操作查询

     

引起:java.sql.SQLException:无法发出executeUpdate()   的SELECT

有谁知道如何解决这个问题?谢谢!

2 个答案:

答案 0 :(得分:0)

找到了解决方法。使用直接JDBC修复了问题。

    Session session = (Session) entityManager.getDelegate();
    session.doWork(new Work() {

        @Override
        public void execute(Connection connection) throws SQLException {
            PreparedStatement pStmt = null;
            try {
                pStmt = connection.prepareStatement(query);
                pStmt.execute();
            } finally {
                if (pStmt != null) {
                    pStmt.close();
                }                       
            }

        }
    });

答案 1 :(得分:0)

EntityManager.createQuery创建JPQL查询接口,而EntityManager.createNativeQuery将创建本机查询接口。

您尝试执行的查询是本机查询。因此,如果您将其更改为createNativeQuery可能会解决问题。