【问题标题】:javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Can not issue data manipulation statements with executeQuery()javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: 无法使用 executeQuery() 发出数据操作语句
【发布时间】:2020-07-22 21:24:26
【问题描述】:

我在数据库中插入数据很好。问题是在插入数据后我试图获取最后插入的数据主键列。但我无法解决这个问题。

注意:我正在使用 jpql,谢谢

public void insertData(String hcpHceId) {
        EntityManager em = getEntityManager();

            em.getTransaction().begin();
//          Query query = em.createNativeQuery("INSERT INTO mdm_id (hcp_hce_id)  VALUES(:id)" );
            Query query = em.createNativeQuery("INSERT INTO mdm_id (hcp_hce_id)  VALUES(?)");
            query.setParameter(1, hcpHceId);
            query.executeUpdate(); // Successfully inserted data
            List list = query.setMaxResults(1).getResultList();  // Error line
            em.getTransaction().commit();

        } catch (Exception error) {
            error.printStackTrace();
            logger.error(error.getMessage());
        } finally {
            em.close();;
        }


}

【问题讨论】:

  • 当您的查询仍是更新语句时,您希望如何获得结果?
  • 我听不懂你说什么

标签: java jpa jpql


【解决方案1】:

您正试图从同一个执行查询中检索列表。查询是一个不可变的对象。您必须使用正确的 select 语句创建一个新查询,这样您才能从数据库中检索数据。

在 executeUpdate 之后,使用 v.g. 创建新查询。 (因为您没有使用本机 sql 显示实体图):

Query retQuery = em.createNativeQuery("SELECT hcp_hce_id FROM mdm_id LIMIT 1");
String id = (String) retQuery.getSingleResult();
assert(id == hcpHceId);

【讨论】:

    猜你喜欢
    • 2013-10-05
    • 2010-12-26
    • 2011-09-21
    • 2015-01-01
    • 2013-12-07
    • 1970-01-01
    相关资源
    最近更新 更多