2013-10-15 2 views
3

Я пытаюсь работать с «мягкими удалениями», как в this blog entry (что включает в себя включение OrmSettings.SaveMapping для вывода файла HBMXML для каждого объекта, а затем вручную добавление фильтра к этому файлу).Можно ли указать фильтр мягкого удаления для Hibernate без использования файлов HBMXML?

Если я следую этим инструкциям, он работает, но в основном дублирует все модели CFC в файлы HBMXML, которые загрязняют файловую систему и создают служебные расходы на обслуживание.

Есть ли способ, чтобы создать фильтр (или изменить файл HBMXML) внутри CFML - т.е. без генерации файла HBMXML?

(Примечание: Использование атрибута where на cfproperty работает один-ко-многим отношений, но не для многих ко многим отношений - для тех, кто пытается фильтровать по соединительной таблице вместо другой объект.)

ответ

1

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

http://docs.jboss.org/envers/docs/

Если вы были заинтересованы только в ревизии удалениях затем зарегистрировать только необходимые слушатель и убедитесь, что вы установили org.hibernate.envers.store_data_at_delete истину. Если вы придерживаетесь только целей аудита, это хорошее решение.

Кроме того, я не думаю, что упомянутое решение будет каскадным удалением. Однако Hibernate позволяет вам модифицировать SQL для любой операции: переопределить операцию удаления SQL (с аннотациями это делается с помощью, например, @SQLDelete (set deleted = 1 ....) на объекте. Затем удаляются каскады.

http://docs.jboss.org/hibernate/orm/4.1/devguide/en-US/html/ch13.html#querysql-cud

+0

Спасибо, рассмотрим Envers - я думаю, что отдельная таблица приемлема, но нужно будет проверить, что-то, что может работать с CF. –

0

Я обычно использую «базовую» объект службы обрабатывать весь мой CRUD для объектов ORM и для каждого объекта ОРМА, я расширяю эту базу. для элементов, которые нуждаются в «мягкие удалениях» я просто переопределить delete() метод служба, чтобы установить свойство (обычно называемое «удаленным» в true), затем сохраните объект.

+0

У нас есть это - использование ColdBox и все объекты обслуживания, расширяющие настраиваемую версию VirtualEntityService, которая работает при непосредственном обращении, но не при выполнении 'SomeObjectService.get (1) .getRelations()' или HQL-фильтрации работает они, конечно, нуждаются в файле HBMXML. –