我正在使用ORMLite,并创建了一个从ORMLite dao框架扩展的自定义DAO。在自定义dao中,我重写create方法,并添加一些逻辑。我查询实体列表,如果它不存在则创建一个新实体,如果存在,则返回现有实体的id。查询工作正常,因为我正在调试并在运行时检查列表对象。但是,只要列表大小为0,它就会执行if..else的第一个块,然后执行第二个块,完全忽略return语句。如果列表不为空,则按预期工作。
任何人都知道为什么这会表现得很时髦?我甚至将覆盖方法名称更改为'persist',以防它由于某种原因递归调用自身,并且它不起作用。
@Override
public int create(DigitalAsset dAsset) throws SQLException {
List<DigitalAsset> assets = this.queryForMatching(dAsset);
if (assets.size() == 0) {
return super.create(dAsset);
}
else {
return assets.get(0).getId();
}
}
答案 0 :(得分:0)
我现在觉得很愚蠢,但经过进一步研究,我发现ORMLite create方法返回受影响的行数,而不是id。事实证明,代码根本没有在两个块中运行。已经很晚了,当时我可能还不太清楚。