Пакетное удаление / чистка записей через Java ORM

Есть несколько доступных вариантов.

  1. Если тема, которую будет публиковать устройство / клиент, является настраиваемой, у вас есть следующие две опции:

    1.1. Опубликуйте в теме event (или просто e, чтобы сэкономить несколько байтов на сообщение) и включите всю соответствующую контекстную информацию в полезную нагрузку сообщения, чтобы потребитель мог выяснить назначение сообщения из полезной нагрузки.

    1.2. Опубликовать в теме, которая выглядит как event/${tenant-id}/${device-id}/${custom-path}, где ${tenant-id} - идентификатор арендатора, которому принадлежит устройство, а ${device-id} - идентификатор устройства. ${custom-path} может быть любым произвольным сегментом пути по вашему выбору. Адаптер MQTT будет пересылать полезную нагрузку сообщения MQTT в сообщении AMQP, у которого свойство address установлено в event/${tenant-id} и будет содержать свойство приложения с именем orig_address , которое будет содержать полный название темы, для которой сообщение было опубликовано. Потребитель может затем использовать эту информацию для получения контекстной информации, например, цели сообщения. Подробнее см. Руководство пользователя адаптера MQTT .

  2. Если тема не может быть настроена на устройстве, вы все равно можете реализовать собственный настраиваемый адаптер MQTT. Это звучит сложнее, чем на самом деле, потому что большая часть требуемой функциональности уже доступна в базовом классе org.eclipse.hono.adapter.mqtt.AbstractVertxBasedMqttProtocolAdapter, из которого вы можете получить производную логику отображения тем. Адаптер Kura реализован именно таким образом и состоит всего из нескольких строк кода. Просто взгляните на org.eclipse.hono.adapter.kura.KuraProtocolAdapter.

5
задан Brian Tompsett - 汤莱恩 2 July 2015 в 17:09
поделиться

3 ответа

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

Необходимо также удостовериться, что ORM обновляется для отражения нового состояния базы данных иначе, можно получить некоторый случай странности.

ORMs являются большими инструментами для отображения объектов к базам данных, но они не обычно универсальные интерфейсы БД.

5
ответ дан 15 December 2019 в 01:12
поделиться

Пределы на запросы являются базой данных определенная функция и нет никакого стандарта SQL (я соглашаюсь, что должно быть).

Решение, которое работает с большинством баз данных, использует представление для группировки нескольких таблиц в одну. Каждая таблица содержит подмножество данных (скажите однажды). Это позволяет Вам отбрасывать целое подмножество сразу. Тем не менее много баз данных имеют проблемы с рабочим ОБНОВЛЕНИЕМ и ВСТАВЛЯЮТ на таком представлении.

Можно обычно работать вокруг этого путем создания представления или искажать для, ВСТАВЛЯЮТ/ОБНОВЛЯЮТ (который указывает на единственную таблицу; "текущий") и группирующееся представление для поиска.

Некоторые базы данных также предлагают разделы, который является в основном тем же самым за исключением того, что можно определить столбец, который указывает, в которой базовой таблице строка должна пойти (на ВСТАВКЕ). Когда необходимо удалить подмножество, можно отбросить/усечь одну из базовых таблиц.

0
ответ дан 15 December 2019 в 01:12
поделиться

Я полагаю, что можно использовать HQL (JPA QL) прямые операции DML, которые обойдут контекст персистентности и кэш, и выполнятся (получающийся SQL) операторы непосредственно:

Query q = session.createQuery("delete YourEntity ye where ye.something like :param");
q.setParameter("param", "anything");
int deletedEntities = q.executeUpdate();
0
ответ дан 15 December 2019 в 01:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: