首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查JPA实体是否存在而不加载它

检查JPA实体是否存在而不加载它
EN

Stack Overflow用户
提问于 2015-03-15 18:24:56
回答 2查看 8.1K关注 0票数 3

问题就在后面。

我们有一个服务器端点,它接收来自客户端的反馈。以多部分/表单格式收到的反馈,包括字段:

代码语言:javascript
复制
ProductId - product identifier
Message - feedback message
Log_file - attached log file
Screenshot - attached screenshot file

服务器代码首先检查具有给定id的产品是否存在,如果不存在,则关闭连接而不接收任何附加文件。

我们使用Eclipselink JPA来存储产品对象。

如何能够检查具有给定id的产品是否存在,而无需从底层数据库加载?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-15 18:30:55

您可以使用count查看是否会返回任何带有id的行。

代码语言:javascript
复制
em.createQuery(
    "SELECT COUNT(b.productId) 
    FROM Products b WHERE b.productId=:productId"
);

如果count < 1没有该id的乘积。否则就会有一个带有这个id的产品。

票数 5
EN

Stack Overflow用户

发布于 2015-03-18 13:38:18

你到底想避免什么?JPA允许延迟加载实体中的几乎每个字段,因此您返回的内容可能会加载,也可能不会加载。如果实体存在于缓存中,那么简单的EntityManager.find操作将从缓存中检索该实体,如果不存在,则检查数据库,因此在大多数情况下,这可能就足够了。如果它进入数据库,那么它将构建一个实例并将其放入缓存中,但该实例将只包含急切的映射。

否则,您可以使用任何返回数据的JPA查询而不是实体实例来避免加载,但这需要数据库命中。上面的count选项是一种方法,但是一个简单的“从Employee选择e.id,其中e.id =:empId”也将起作用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29064470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档