私はまだこれをテストしていませんが、私は単に次のことを行っています:
@RevisionListener(SystemRevisionListener.class)
@Entity
public class SystemRevision extends AbstractRevision
{
@Column(nullable = false, updatable = false)
protected QuartzTriggerHandle job;
@Column(nullable = false, updatable = false)
protected Class jobClass;
...
}
@RevisionListener(WebRevisionListener.class)
@Entity
public class WebRevision extends AbstractRevision
{
@ManyToOne(optional = false)
@JoinColumn(nullable = false, updatable = false)
protected HttpRequest httpRequest;
...
}
次に、各リスナーで、これらのプロパティを設定するために必要なことは何でもします。これで、エンティティがどのように変更されたか、ユーザーが変更を行ったかどうか(および、どのリクエストに関連付けられているか)、またはシステムがエンティティを変更した場合、どのジョブが変更の原因であるかを追跡できるようになります。SystemRevisionには、これよりも多くのプロパティ、おそらく引数とメソッド名を格納します。