问题在于。
我们有一个服务器端点,可以从客户端收到反馈。以多部分/基于表单的格式收到的反馈,包括字段:
ProductId - product identifier
Message - feedback message
Log_file - attached log file
Screenshot - attached screenshot file
服务器代码首先检查具有给定id的产品是否存在,如果不存在 - 关闭连接而不接收任何附加文件。
我们使用Eclipselink JPA来存储产品对象。
如果没有从底层数据库加载产品,如何检查具有给定ID的产品是否可行?
答案 0 :(得分:5)
您可以使用count
查看是否会返回包含该ID的任何行。
em.createQuery(
"SELECT COUNT(b.productId)
FROM Products b WHERE b.productId=:productId"
);
如果count < 1
没有带有该ID的产品。
否则,有一个带有该ID的产品。
答案 1 :(得分:3)
你想要完全避免什么? JPA允许延迟加载实体中的几乎每个字段,因此您获得的内容可能会加载也可能不会加载。如果实体存在,则简单的EntityManager.find操作将从缓存中检索实体,如果不存在,则检查数据库,因此对于大多数情况,这可能就足够了。如果它进入数据库,它将构建一个实例并将其放入缓存中,但该实例将只包含预先映射。
否则,您可以使用任何返回数据而不是实体实例的JPA查询来避免加载,但这需要数据库命中。上面的计数选项是单向的,但是一个简单的“从员工e中选择e.id,其中e.id =:empId”也可以。