我在执行" 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
有谁知道如何解决这个问题?谢谢!
答案 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可能会解决问题。