#jpa
#jpa
Вопрос:
Я пытаюсь вызвать процедуру Oracle, используя Persistence API:
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void removeProcess(User user, BigDecimal processId) {
EntityManager em = emb.createEntityManager(user);
em.createNativeQuery("{ call DOF.DF#DEL_PROCESS(?) }")
.setParameter(1, processId)
.executeUpdate();
em.close();
}
И я получил следующее исключение:
Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Invalid column index
Error Code: 17003
Call: { call DOF."DF?)" }
bind => [1 parameter bound]
Если я скопирую DF#DEL_PROCESS в DF_DEL_PROCESS, все работает нормально. Как я могу избежать # в имени процедуры??
Ответ №1:
‘#’ — это внутренний маркер параметра по умолчанию, используемый в EclipseLink.
Вы можете изменить это, используя подсказку запроса «eclipselink.jdbc.parameter-delimiter»
Кроме того, если вы встроите параметр вместо использования setParameter(), он также должен работать.