Из моего исследования я обнаружил, что hibernate не поддерживает фильтрацию, как мне бы хотелось. Моя цель состоит в том, чтобы независимо от того, как экземпляр «Child» извлекается из базы данных (либо через ManyToOne, OneToOne, по id / запросу и т. Д.), Я бы хотел, чтобы фильтр «Child» применялся принудительно (в приведенном ниже примере он имеетзапрос 1 = 1, но в приложении он значительно сложнее и использует параметры).
Я рассмотрел многопользовательский режим гибернации, но он не обеспечивает необходимую гибкость.
Преимущество фильтров в том, что они могут быть установлены в одном центральном месте, и, что более важно, они могут быть параметризованы.
Я просматривал NamedQuery, но он отрицает цель использования ORM / массового извлечения / HQL и т. Д. поскольку каждое отдельное отношение будет извлекаться независимо, а количество запросов будет непомерно большим.
Существуют ли какие-либо внутренние классы в спящем режиме, которые я могу изменить, чтобы обеспечить такое поведение (например, с помощью замены байт-кода)?
@Entity
@FilterDef("filter")
@Filter(name="filter", condition="....")
class Parent {
@OneToOne
@Filter(name="filter") // doesn't work
Child aChild;
@OneToMany
@Filter(name="filter") // want the filter defined on the class 'Child' and not specify the condition here
Set<Child> manyChildren;
}
@Filter(name="filter", condition="1=1")
@Entity
class Child {
}