javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Can not issue data manipulation statements with executeQuery()

huangapple 未分类评论56阅读模式
英文:

javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Can not issue data manipulation statements with executeQuery()

问题

我在数据库中插入数据是好的。问题是在插入数据后,我试图获取最后插入的数据的主键列。但是我不知道如何解决这个问题。

注意:我正在使用JPQL,谢谢。

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

    try {
        em.getTransaction().begin();
        Query query = em.createNativeQuery("INSERT INTO mdm_id (hcp_hce_id) VALUES(?)");
        query.setParameter(1, hcpHceId);
        query.executeUpdate(); // 成功插入数据
        List list = query.setMaxResults(1).getResultList();  // 错误行
        em.getTransaction().commit();
    } catch (Exception error) {
        error.printStackTrace();
        logger.error(error.getMessage());
    } finally {
        em.close();
    }
}

请注意,这只是代码的翻译部分。如果您需要更多帮助或解释,请随时提问。

英文:

I am insert data in db is good. The problem is after inserted data i am trying to get last inserted data primary key column. But i can't how to solve this problem.

note : i am using jpql , Thanks

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

你正在尝试从相同的执行查询中检索列表。查询是一个不可变对象。您必须使用适当的选择语句创建一个新的查询,这样您就能够从数据库中检索数据。

在执行完executeUpdate之后,使用如下方式创建新的查询,例如(由于您没有展示您的实体图,所以使用本机SQL):

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

You are trying to retrieve the list from the same execute query. Query is an immutable object. You must create a new query with the proper select statement, so you will be able to retrieve data from database.

After the executeUpdate, create the new query using, v.g. (as you did not show your entity graph, using native sql):

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

huangapple
  • 本文由 发表于 2020年4月10日 14:23:00
  • 转载请务必保留本文链接:https://java.coder-hub.com/61135031.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定