2011-11-09 21 views
2

私はユーザー入力から更新しているJPAドメインエンティティを持っています。そのオブジェクトに関する多くの要因に応じて、更新時に実行するアクションがあります(この場合、更新は「完了したことをマークする」)。ヌルエンティティフィールドは@PostUpdateメソッドを自動的に停止させます

データベースでは、2つの「完了後のアクション構成」フィールド(noteおよびnext_workflow)はNULL可能であり、関心のある値を持つか、NULLです。これらの中には非常に多くのものがあるかもしれませんが、私はこれらの2つから始まります。

私はモデルクラスに次のメソッドを書いた:NULL「ノート」の値を持つエンティティの場合

@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で 『nextWorkflow』値、コンソール出力は次のようになります。

Got post update for this item 
In the middle of post update for this item 

どこでもエラーなし、ノースタックダンプ、何もありません。このメソッドはただ静かに終了し、このエンティティで行っているマージは完了しません(データベースは変更されません)。

デバッガでこれを実行すると、テスト対象の行が表示され、値がNULLの場合は、「ソースが見つかりません」というタブが表示されます。私はそれは何かに踏み込むことができないと言っているデバッガだと思うが、実際にそれを求めているわけではない。...

答えて

0

ルーキーな質問が出てくる。

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

答えは、ヌルネスのフィールドをテストすることで、ヌルネスの副作用はテストしません。

if (! (this.getNote() == null)) { 
... 
} 
関連する問題