2

ユーザー入力から更新している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の場合、「ソースが見つかりません」というタブが表示されますが、これをどうすればよいかわかりません。何かに足を踏み入れることができないと言っているのはデバッガーだけだと思いますが、実際にはそれを求めているわけではありません...

4

1 に答える 1

0

ルーキーの質問、それが判明しました。

Objectfieldフィールドがnullの場合、object.getField().length()はnullポインタの呼び出しです。

答えは、ヌル性の副作用ではなく、ヌル性についてフィールドをテストすることです。

if (! (this.getNote() == null)) {
...
}
于 2011-11-09T15:47:20.217 に答える