I am implementing soft delete with Hibernate. Each entity that supports soft-deleting has an attribute for it.
I have created @FilterDef in package-info.java for package with domain objects.
applied it to all DeleteAware entities
and enabled in when using in queries
Filter is applied and works correctly for primary entity (for example when I query customers I can see that additional where condition is always applied as needed). Problem is with filter of association. Let's say Customer entity has collection of CustomerGroup.
However when I query for Customer, groups collection contains deleted entities. I have turned on sql logging and I can see that condition is not applied for lazy query. However if I change
to
it works. Both entities are annotated with @Filter. I have also tried applying @Filter annotation to collection itself without success. For initial testing I have also ensured that filters are not disabled and includeDeleted parameter is always false. @Where annotation on entities works like a charm, but cannot be disabled (99% of queries we want to filter out deleted objects but there is that pesky 1% where we need deleted ones). Looks like filters are not applied when relation is lazy loaded. |