Search code examples
javaoracle-databasehibernatejpaopenjpa

Encountered "INSERT" at character 1, but expected: ["DELETE", "SELECT", "UPDATE"]


I have an insert JPA named query as below. When I try to execute it from my DAO using enity manger I am getting the below error. I am using Apache OpenJPA, I could not identify the root cause of this issue. I cannot use the persist method because of the complexity of my domain object.

Encountered "INSERT" at character 1, but expected: ["DELETE", "SELECT", "UPDATE"].

@NamedQuery(
 name=IuaPersistenceConstants.QUERY_INSERT_AGREEMENT_ACKNOWLEDGEMENT,
 query="INSERT INTO AgreementAcknowledgement agrackn VALUES agrackn.id.agrmntCntntUrl = :agrmntCntntUrl, agrackn.id.prvsndUserSqn = :prvsndUserSqn, agrackn.id.prvsnUserEffD = :userEffDate, " +
 "agrackn.id.agrmntacknEffD = :agrmntacknEffD, agrackn.acknExpD = :acknExpD, agrackn.crtTs = :crtTs, agrackn.crtUidC = :crtUidC, agrackn.lstUpdtTs = :lstUpdtTs, agrackn.lstUpdtUidC = :lstUpdtUidC")


Query ackQuery =getEntityManager().createNamedQuery(IuaPersistenceConstants.QUERY_INSERT_AGREEMENT_ACKNOWLEDGEMENT);
 ackQuery.setParameter("agrmntCntntUrl", agreementDO.getAgreementURL());
 ackQuery.setParameter("agrmntacknEffD", agreementDO.getAgreementEffDate());
 ackQuery.setParameter("acknExpD", agreementDO.getAgreementExpDate());
 ackQuery.setParameter("prvsndUserSqn", userDO.getUserSequence());
 ackQuery.setParameter("userEffDate", userDO.getUserEffDate());
 ackQuery.setParameter("crtTs", new Date());
 ackQuery.setParameter("crtUidC", "WS");
 ackQuery.setParameter("lstUpdtTs", new Date());
 ackQuery.setParameter("lstUpdtUidC", "WS");
 ackQuery.executeUpdate();

Solution

  • OpenJPA doesn't seem to support JPQL "INSERT" queries. But then that is not surprising since JPA DOES NOT define INSERT queries. It defines SELECT, UPDATE, DELETE queries and that is all. See the JPA spec. This is not SQL.