ユーザー入力から更新しているJPAドメインエンティティがあります。そのオブジェクトに関する多くの要因に応じて、更新時に実行するアクションがあります(この場合、更新は「完了のマークを付ける」ことです)。
データベースでは、2つの「完了後のアクション構成」フィールド(noteおよびnext_workflow)はヌル可能であり、対象の値を持つか、NULLです。これらは非常に多いかもしれませんが、私はこれら2つから始めています。
モデルクラスで次のメソッドを作成しました。
@PostUpdate
public void gotUpdate() {
System.out.println("Got post update for " + this.getDescription());
if (! this.getNote().isEmpty()) {
Note n = new Note();
n.setAssetId(this.getAssetId());
n.setNotifyLessor(1);
n.setNote(this.getLessorNote() + this.getCapturedData());
n.setCreatedDate(new Date());
n.persist();
}
System.out.println("In the middle of post update for " + this.getDescription());
if (this.getNextWorkflow() != 0) {
Asset a = this.getAssetId();
a.setWorkflowId(Workflow.findWorkflow(this.getNextWorkflow()));
a.merge();
}
System.out.println("Finishing post update for " + this.getDescription());
}
NULLの「音価」値を持つエンティティの場合、コンソール出力は次のようになります。
Got post update for this item
NULL以外の「note」値とNULLの「nextWorkflow」値を持つエンティティの場合、コンソール出力は次のようになります。
Got post update for this item
In the middle of post update for this item
どこにもエラーはなく、スタックダンプも、何もありません。メソッドはサイレントに終了し、このエンティティで実行しているマージは完了しません(データベースは変更されません)。
デバッガーでこれをステップ実行すると、テストが行われている行に到達し、値がNULLの場合、「ソースが見つかりません」というタブが表示されますが、これをどうすればよいかわかりません。何かに足を踏み入れることができないと言っているのはデバッガーだけだと思いますが、実際にはそれを求めているわけではありません...