我有一个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
对于具有非NULL“note”值且NULL为“nextWorkflow”值的实体,控制台输出为:
Got post update for this item
In the middle of post update for this item
任何地方都没有错误,没有堆栈转储,没有任何错误。该方法只是默默地退出,并且我在这个实体上做的合并没有完成(数据库保持不变)。
在调试器中逐步执行此操作会到达正在测试内容的行,如果值为NULL,则会弹出一个标签“Source not found”,我真的不知道该怎么做。我认为这只是调试人员说它不能介入某些东西,但我实际上并没有要求它......
答案 0 :(得分:0)
新秀问题,结果证明了。
如果Object
的{{1}}字段为空,则field
是对空指针的调用。
答案是测试字段的空值,而不是零点的一些副作用。
object.getField().length()