2017-02-13 2 views
8

Мы пытаемся фильтровать \ работать с Persistent Collection на основе содержащихся в нем объектов (отфильтровывать конкретные записи).Hibernate - манипулирование сбором сбора сообщений

Поскольку эта манипуляция будет выполняться на большом количестве различных объектов, содержащих разные коллекции, она должна быть как можно более общей. Фильтрация на уровне HQL \ SQL не является вариантом, поскольку ее невозможно будет поддерживать. Это означает, что он должен выполняться после загрузки и инициализации коллекции. В настоящее время мы используем многие события Hibernate для обработки отдельных объектов, , поэтому мы попытались прослушивать на InitializeCollectionEvent. Но, как оказалось, большинство наших коллекций инициализируются с использованием HQL Fetch, поэтому это событие не будет создано для них.

Есть ли другие события Hibernate, которые мы можем использовать?

Любое другое место, где коллекции обрабатываются после их загрузки?

Мы используем Hibernate 4.1.7.

ответ

1

Я думаю, что это не очень хорошая идея для фильтрации коллекции на стороне сервера, когда коллекция была загружена. Если вы это сделаете, это означает, что smth пойдет не так, переосмыслите модель db или структуру сущности. Один из лучших способов фильтрации коллекции - использовать HQL. Или вы можете использовать @Where или @Loader, @Filter.

+0

В идеальном мире я бы согласился с вами, но в этом случае изменение модели \ базы данных не является вариантом, поскольку это массивная и сложная производственная система, и воздействие будет слишком большим и рискованным. Как я уже упоминал выше, фильтрация возможна через HQL, а также аннотацию Hibernate, как вы предполагали, но будет очень сложно поддерживать позже. В идеале манипуляция должна выполняться в фазе загрузки, используя событие или класс Loader. – Nir

+0

Хорошо, вы попробовали @PostLoad ??? Я не уверен, но вы можете попробовать. И я предлагаю попробовать его в org.hibernate.Interceptor, просто создайте свою собственную реализацию, легко google, что Interceptor действительно мощный класс. – idmitriev

+0

Перехватчики могут обрабатывать коллекции, но они не будут инициализированы. – Nir

Смежные вопросы