Почти каждая таблица в нашей базе данных имеет 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"
)