Невозможно удалить элементы из mongoDB с помощью Hibernate OGM

Я использую следующий код для удаления всех элементов из коллекции mongoDB с заданным parent_id:

final String strQuery = "db.Child.remove({'$query':{'PARENT_ID':'" + parentId + "'}})";
                final Query query = entityManager.createNativeQuery(strQuery, Child.class);
                query.executeUpdate();

Однако я получаю следующее исключение:

Unexpected Exception
com.mongodb.util.JSONParseException:
db.Child.remove({'$query':{'CHILD_ID':'7313c076-dbaa-4557-b80f-68d040b65d82'}})

Если я заменю remove на find, я верну результат. Не знаю, что вызывает ошибку синтаксического анализатора JSON в вышеупомянутом собственном запросе.

Я использую hibernate-ogm версии 4.3 Final с mongo-db 3.2.


person Obaid Maroof    schedule 30.09.2016    source источник
comment
поэтому я пришел к следующему выводу: я не могу использовать $query, так как он устарел и больше не поддерживается, а метод курсора .sort() не поддерживается Hibernate OGM 5.0.1. Любая другая альтернатива, чем я сортирую ее в своем коде?   -  person Obaid Maroof    schedule 02.10.2016
comment
Это прискорбно, но это связано с несовместимыми с MongoDB изменениями с 3.0 на 3.2. Из-за этих изменений OGM 5.0 не очень хорошо поддерживает MongoDB 3.2. Я исправил это некоторое время назад в основной ветке: см. hibernate/hibernate-ogm/pull/749/commits/ . Мы планируем выпустить первую альфа-версию OGM 5.1 в ближайшее время, и она должна быть довольно безопасной в использовании.   -  person Guillaume Smet    schedule 03.10.2016
comment
я думал, что в JPA есть метод em.remove...   -  person Neil Stockton    schedule 08.10.2016
comment
Мне нужно удалить все childs с родительским PARENT_ID. С em.remove мне нужно будет перебрать все дочерние элементы и удалить элементы по отдельности.   -  person Obaid Maroof    schedule 10.10.2016
comment
@ObaidMaroof мы выпустили Hibernate OGM 5.0.2, который поддерживает MongoDB 3.2 и должен работать нормально. ХТН.   -  person Guillaume Smet    schedule 11.10.2016
comment
Вы, ребята, начинаете. Спасибо @GuillaumeSmet. Это сработало для меня без каких-либо дополнительных проблем.   -  person Obaid Maroof    schedule 12.10.2016


Ответы (1)


Hibernate OGM 4.3 не поддерживал операцию удаления для собственных запросов.

Вы должны попробовать OGM 5.0.2.Final: он должен решить вашу проблему, так как мы добавили поддержку довольно многих других операций (и множество других исправлений и улучшений).

person Guillaume Smet    schedule 30.09.2016
comment
После сброса версии OGM в спящем режиме я получаю следующее: Caused by: com.mongodb.WriteConcernException: Write failed with error code 2 and error message 'unknown top level operator: $query' - person Obaid Maroof; 02.10.2016
comment
хорошо, удаление конструкции $query, похоже, помогло. Вы знаете, как использовать конструкцию $orderBy для поиска? - person Obaid Maroof; 02.10.2016
comment
Разочаровывает то, что примеры в документации здесь на самом деле не работает. Я не могу использовать конструкцию $query, так как она не работает с вышеупомянутой ошибкой. - person Obaid Maroof; 02.10.2016
comment
Примеры работают с MongoDB 3.0, которая является версией, поддерживаемой OGM 5.0. Из-за несовместимых изменений OGM 5.0 на самом деле не поддерживает MongoDB 3.2. Это исправлено в мастере и будет включено в выпуск 5.1 — мы надеемся скоро выпустить альфа-версию. - person Guillaume Smet; 03.10.2016