Почти каждая таблица в нашей базе данных имеет 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.
Существует ли простой способ сказать, что для каждого 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"
)