Гибернация: как получать только нелогически удаленные объекты

Почти каждая таблица в нашей базе данных имеет FK для таблицы Auditing, в которой регистрируются созданные, обновленные и удаленные состояния (дата и имя пользователя).

Мы сопоставили таблицу аудита в класс Auditing и используйте ее следующим образом:

@MappedSuperclass
public class BusinessObject extends DataObject {

    private static final long serialVersionUID = -1147811010395941150L;

    @OneToOne(fetch = FetchType.EAGER, cascade = { CascadeType.ALL })
    @JoinColumn(name = "AUD_ID")
    private AuditingObject auditing;
...

Как и следовало ожидать, почти каждая сущность является наследником BusinessObject.

Есть ли простой способ сказать, что для каждого бизнес-объекта получать только «auditing.deleted is null».

Я пробовал добавить @Where и @WhereJoinTable в businessObject, но это не работает так, как я ожидал.

В настоящее время я сделал это для одного из своих запросов, и это работает, но мне бы не хотелось делать это для всех запросов, поскольку у нас их около 150.

@NamedQuery(
    name="allCountries",
    query="SELECT c FROM Country c"
        + " LEFT JOIN FETCH c.labelDefinition "
        + " LEFT JOIN FETCH c.labelDefinition.translations "
        + " WHERE c.auditing.deleted is null"
        + " ORDER BY c.code"
)
6
задан Sindhoo Oad 31 March 2015 в 07:50
поделиться