Как выполнить пакетное удаление SQL с помощью Playframework 2/Ebean?

Мне нужно удалить некоторые строки из таблицы в соответствии с некоторыми критериями. SQL-запрос должен быть таким:

DELETE FROM tablename WHERE cond1 = 1 AND cond2 = 2

Но я не нашел таких методов. Я могу удалить одну модель:

model.delete();

Или я могу получить список моделей, соответствующих заданным критериям:

Model.FINDER.where().eq("cond1", 1).eq("cond2", 2).findList();

Конечно, я могу получить список моделей и удалить их в цикле, но это очень плохое решение. Вместо одного SQL-запроса я получаю потенциально неограниченное количество SQL-запросов. Я также не хочу выполнять необработанный код SQL, потому что это может нарушить кросс-платформенную совместимость SQL.

Это действительно частая задача. Правда ли, что в Play Framework нет средств для работы с ним?


person bvitaliyg    schedule 16.02.2014    source источник


Ответы (1)


Действительно, удаление объектов по одному — плохое решение, к счастью, Ebean позволяет выполнять SqlUpdate например:

SqlUpdate tangoDown = Ebean.createSqlUpdate("DELETE FROM table_name WHERE id = 123");
tangoDown.execute(); 

см.: другой вопрос для параметризованных запросов.

person biesior    schedule 16.02.2014
comment
К вашему сведению: также обратите внимание, что версия Ebean версии 6.5.1 добавила ... удалить (запрос) - github.com/ebean-orm/avaje-ebeanorm/issues/398 - person Rob Bygrave; 09.09.2015