javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: невозможно выполнить операторы манипулирования данными с помощью executeQuery () - PullRequest
0 голосов
/ 10 апреля 2020

Я вставляю данные в БД - это хорошо. Проблема в том, что после вставленных данных я пытаюсь получить последний вставленный столбец первичного ключа данных. Но я не могу решить эту проблему.

Примечание: я использую 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();;
        }


}

1 Ответ

0 голосов
/ 10 апреля 2020

Вы пытаетесь получить список из того же самого запроса на выполнение. Запрос является неизменным объектом. Вы должны создать новый запрос с правильным оператором выбора, чтобы иметь возможность извлекать данные из базы данных.

После executeUpdate создайте новый запрос, используя vg (поскольку вы не отображали свой граф сущностей, используя родной sql):

Query retQuery = em.createNativeQuery("SELECT hcp_hce_id FROM mdm_id LIMIT 1");
String id = (String) retQuery.getSingleResult();
assert(id == hcpHceId);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...