Java JPA对“的本地查询”;选择“输入输出文件”;

Java JPA对“的本地查询”;选择“输入输出文件”;,java,mysql,hibernate,jpa,Java,Mysql,Hibernate,Jpa,我在通过JPA本机查询执行“SELECT INTO outfile”查询时遇到问题 我尝试了以下代码: Query q = entityManager.createNativeQuery("SELECT * INTO OUTFILE '/tmp/temp.sql' FROM DummyTable"); return q.getResultList(); 但我有一个例外: 原因:java.sql.SQLException:ResultSet来自更新。没有数据 似乎JPA将其视为更新,因此我更改了

我在通过JPA本机查询执行“SELECT INTO outfile”查询时遇到问题

我尝试了以下代码:

Query q = entityManager.createNativeQuery("SELECT * INTO OUTFILE '/tmp/temp.sql' FROM DummyTable");
return q.getResultList();
但我有一个例外:

原因:java.sql.SQLException:ResultSet来自更新。没有数据

似乎JPA将其视为更新,因此我更改了代码以使用执行更新:

Query q = entityManager.createNativeQuery("SELECT * INTO OUTFILE '/tmp/temp.sql' FROM DummyTable");
q.executeUpdate();
现在,我有另一个例外

原因:org.hibernate.exception.genericjdbception:无法 执行本机批量操作查询

原因:java.sql.SQLException:无法为发出executeUpdate() 挑选


有人知道如何解决这个问题吗?谢谢

找到了一个解决方法。使用直接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();
                }                       
            }

        }
    });
创建JPQL查询接口,而将创建本机查询接口


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

您好,谢谢您的回答。我确实使用了createNativeQuery,但我在问题中键入了错误的内容。现在我将解决这个问题。您需要将查询视为一个更新,q.getResultList()将尝试提取一个结果集,当您执行转储(“选择到输出文件”)时,获得的结果是一个整数(或长),指示有多少条记录写入了文件。感谢您的评论。我确实尝试过使用executeUpdate(),但最后出现了另一个异常。