2

我有一个从用户输入更新的 JPA 域实体。根据有关该对象的许多因素,它在更新时会执行一些操作(在这种情况下,更新是“将其标记为已完成”)。

在数据库中,两个“完成后操作配置”字段(note 和 next_workflow)可以为空,并且要么具有感兴趣的值,要么为 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 "note" 值的实体,控制台输出为:

Got post update for this item

对于具有非空“note”值和空“nextWorkflow”值的实体,控制台输出为:

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

任何地方都没有错误,没有堆栈转储,什么都没有。该方法只是默默地退出,并且我在这个实体上所做的合并没有完成(数据库保持不变)。

在调试器中逐步执行此操作会到达正在测试事物的那一行,如果值为 NULL,它会弹出一个选项卡,上面写着“找不到源”,我真的不知道该怎么做。我认为这只是调试器说它不能进入​​某些东西,但我实际上并没有要求它...

4

1 回答 1

0

菜鸟问题,原来如此。

如果Objectfield字段为空,则object.getField().length()调用空指针。

答案是测试该字段的空值,而不是空值的一些副作用。

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