2013-08-11 2 views
1

У меня есть устаревшая база данных, где 70% всех таблиц имеют столбцы «valid_from» и «valid_to». Эти столбцы указывают, что запись активна и может использоваться во время производства. У нас также есть эти столбцы на таблицах ассоциаций, которые используются для отношений «многие ко многим».Фильтрация активных записей в Hibernate

Поскольку необходимо использовать только активные записи, мы должны фильтровать активные, когда вызывается запрос на чтение. Мы планируем сделать это с помощью глобального фильтра, который всегда задается в сеансе Hibernate с помощью совета AOP. Таким образом, invoker никогда не должен беспокоиться о настройке фильтра Hibernate.

Мы беспокоимся о следующем: 1) Мы не создали отдельный класс для таблиц ассоциаций, поэтому мы беспокоимся, как фильтровать активные записи из таких таблиц. Можно ли просто упомянуть поля «valid_from» и «valid_to» в фильтре, который сопоставляется с таблицей ассоциации, в то время как эти поля явно не известны Hibernate? Будет ли это работать?

2) Фильтр не следует использовать для таблиц, у которых нет допустимых полей. Но фильтр всегда установлен. Будет ли это давать какие-либо вопросы?

3) Действующие поля управляются веб-админ-инструментом. Как мы можем изменить допустимые поля в таблицах ассоциаций без явного создания класса сопоставления? Мы действительно хотим избежать таких занятий! Или, может быть, есть лучший подход к обработке активных записей в целом?

Вся помощь очень ценится!

ответ

0

Здесь я хотел бы высказать некоторые комментарии. Надеюсь, это может помочь вам как-то.


  1. AssociationOverride это единственный способ я знаю, для достижения этой цели (это требует дополнительных классов). Посмотрите на: http://www.mkyong.com/hibernate/hibernate-many-to-many-example-join-table-extra-column-annotation/

  2. Я не вижу никаких проблем.

  3. Если вы выясните способ создания своих сопоставлений без AssociationOverride; то вам, вероятно, потребуется создать обычную утилиту JDBC для обновления этих полей.


В качестве альтернативы, вы можете обрабатывать этот сценарий по-разному. У каждого объекта будет свойство @Formula, называемое «isActive», на основе столбцов «valid_from» - «valid_to». Затем вы можете правильно фильтровать результаты, используя HQL или Criteria.

Надеюсь, это поможет.

+0

Для пункта 2: не будут ли возникать такие проблемы, как «недопустимый столбец»? – user2054927

+0

@ user2054927 Я понимаю, что вы имеете в виду сейчас. Да, это может быть проблемой. Конечно, есть уродливые и ошибочные методы обхода, которые я бы не советовал. – Rafa

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