您可以只计算指定的项目id
,而您的项目id
是唯一的,如果项目存在则返回 1,如果不存在则返回 0,因此您可以轻松地创建条件:
boolean itemExists
= (YourModel.find.where().eq("id", id).findRowCount() == 1) ? true : false;
Logger.info("Item " + ((itemExists) ? "exists" : "not found!"));
另一方面,如果您的意图是为 Json 中的示例返回现有实体,则无需进行单独检查,只需检查它是否不为空...
YourModel entity = YourModel.find.byId(id);
if (entity == null) return notFound("No such record");
// .. rest of code for preparing API...
编辑
关于成本:find.byId(id)
尝试获取整个实体,而find.ref(id)
仅获取参考。不幸的是,您无法确定对象是否存在,ref(id)
因为它始终不为空,因此恕我直言,按 id 计数元素比选择单个字段来检查 Db 是否返回实体更便宜。
实际上find.byId(id)
是最昂贵的选项,因为它加载整个实体,对于优化良好的 API,通常最好使用 Ebean 编写专用方法select()
,fetch()
例如:
YourModel e = YourModel.find.select("id, name, age").where().eq("id", id).findUnique();
或者
List<YourModel> le = YourModel.find.select("id, name, age").where().eq("id", id).findList();