Hibernate 5 значение не установлено для параметра № 2 - PullRequest
0 голосов
/ 20 марта 2019

Я работаю над миграцией с Hibernate 3 на Hibernate 5 версии.В настоящее время я использую 5.4.0.Final версию.

У меня проблема с одним из тестов, в котором используется метод репозитория deleteByAllPatientFlowGens :

public void deleteByAllPatientFlowGens(List<PatientFlowGen> list) {
    if (!list.isEmpty()) {
        getEntityManager().createNamedQuery(DELETE_BY_ALL_PATIENT_FLOW_GENS_QUERY)
                .setParameter("patient_flow_gens", list)
                .executeUpdate();
    }
}

Он должен вызывать именованный запрос:

@NamedQuery(name = RequestedFlowGenSettings.DELETE_BY_ALL_PATIENT_FLOW_GENS_QUERY,
            query = "delete from RequestedFlowGenSettings where patientFlowGen in :patient_flow_gens")

Метод получает список с двумя элементами, но в логах я вижу, что оба параметра связываются как 1 :

2019-03-19 04:44:16,855 DEBUG [main] SQL - delete from requested_flow_gen_settings where patient_flow_gen in (? , ?)
2019-03-19 04:44:16,858 TRACE [main] BasicBinder - binding parameter [1] as [BIGINT] - [2994]
2019-03-19 04:44:16,858 TRACE [main] BasicBinder - binding parameter [1] as [BIGINT] - [2995]
2019-03-19 04:44:16,864 ERROR [main] SqlExceptionHelper - The value is not set for the parameter number 2

С предыдущей версией Hibernate (3.6.3.Final) все работало нормально.Есть журналы:

2019-03-19 04:47:42,275 DEBUG [main] SQL - delete from requested_flow_gen_settings where patient_flow_gen in (? , ?)
2019-03-19 04:47:42,277 TRACE [main] BasicBinder - binding parameter [1] as [BIGINT] - 2996
2019-03-19 04:47:42,277 TRACE [main] BasicBinder - binding parameter [2] as [BIGINT] - 2997

PS Я пытался использовать метод setParameterList , но проблема была та же.

1 Ответ

0 голосов
/ 25 марта 2019

Я нашел единственный способ решить проблему - выполнить именованный запрос для каждого элемента из списка. Итак, вот мой метод хранилища:

public void deleteByAllPatientFlowGens(List<PatientFlowGen> list) {
    if (!list.isEmpty()) {
        list.forEach(patientFlowGen -> {
            getEntityManager().createNamedQuery(DELETE_BY_ALL_PATIENT_FLOW_GENS_QUERY)
                    .setParameter("patient_flow_gens", patientFlowGen)
                    .executeUpdate();
        });
    }
}

Я знаю, это быстрое грязное исправление. Но у меня нет выбора)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...