データベース内のほぼすべてのテーブルには、作成、更新、および削除されたステータス(日付とユーザー名)をログに記録する監査テーブルへのFKがあります。
監査テーブルを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.deletedisnull」のみを受け取るという簡単な言い方はありますか。
businessObjectに@Whereと@WhereJoinTableを追加しようとしましたが、期待どおりに機能しないようです。
現在、クエリの1つに対してこれを実行しましたが、これは機能しますが、約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"
)