首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么在JPA中通过id找到对象,而不是通过JPQL查询?

为什么在JPA中通过id找到对象,而不是通过JPQL查询?
EN

Stack Overflow用户
提问于 2010-08-05 18:57:32
回答 3查看 913关注 0票数 1

我有一个Spring4测试用例,它使用JUnit @Transactional注释保存一个对象,然后尝试查找它。当我使用这个实现时,测试用例通过了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Override
public EventSummary findEventSummaryById(Integer id) {
    return em.find(EventSummary.class, id);
}

当我使用这个实现(然后更改我在测试用例中调用的方法)时,它会失败:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Override
public EventSummary findEventSummary(Integer id) {
    Query query = em.createQuery("select es from EventSummary as es where es.id = :id");
    query.setParameter("id", id);
    EventSummary result = (EventSummary) query.getSingleResult();
    return result;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-05 21:36:38

如果您正在使用缺省刷新模式(AUTO),并且如果您在一个事务中执行查询,那么JPA规范将保证查询不会返回陈旧或不正确的数据:

3.6.2查询和FlushMode

刷新模式设置会影响查询结果,如下所示。

在事务内执行查询时,如果在Query对象上设置了FlushModeType.AUTO,或者如果持久性上下文的刷新模式设置为AUTO (缺省值),并且尚未为Query对象指定刷新模式设置,则持久性提供器负责确保对持久性上下文中所有实体的状态的所有更新对查询处理可见,这些更新可能会影响查询的结果。持久性提供程序实现可以通过将这些实体刷新到数据库或通过一些其他方式来实现这一点。如果设置了FlushModeType.COMMIT,则对持久性上下文中的实体进行的更新对查询的影响是未指定的。

公共枚举提交{ FlushModeType,AUTO }

如果没有活动的事务,则持久性提供程序不能刷新到数据库。

假设您使用的是AUTO,请检查事务方面。

票数 3
EN

Stack Overflow用户

发布于 2010-08-05 20:44:41

Т该实体处于当前会话(实体管理器)中-它处于持久状态,等待刷新。get方法首先检查会话的内容,如果没有找到,则转到底层数据库。在您的示例中,该实体刚刚保存在同一会话中,因此会找到并返回该实体。

更新:原来问题是使用了错误的事务管理器,因此实体没有刷新到数据库中。参见Pascal的解释。

票数 3
EN

Stack Overflow用户

发布于 2010-08-05 19:04:35

在第一种情况下,id是一个整数

在第二个示例中,id是一个字符串

Integer永远不会等于字符串

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

https://stackoverflow.com/questions/3418160

复制
相关文章
oracle中number的用法,Oracle Number数字
在本教程中,您将学习Oracle NUMBER数据类型以及如何使用它来为表定义数字列。
全栈程序员站长
2022/09/15
1.7K0
Flutter 中FlatButton的替代方案
最新版本的Flutter已将FlatButton标记为过时,我们可以使用 TextButton 或 ElevatedButton 来进行替代,FlatButton 与替代组件的参数会有差异。
xiangzhihong
2023/07/09
6610
oracle number整数,Oracle number类型的语法和用法
1. 精度(precision),或总位数。默认情况下,精度为38位,取值范围是1~38之间。也可以用字符*表示38。
全栈程序员站长
2022/09/15
2.5K0
oracle的number类型
p : 精度位precision,数据的有效位;取值范围38;默认38;*表示38
全栈程序员站长
2022/09/15
6550
Electron中remote模块的替代方案
在Electron12时候被废弃,使用必须配置enableRemoteModule
码客说
2023/09/14
2K0
Oracle中number数据类型的存储机制
Oracle中number数据类型存储的是整型,碰巧看到这篇文章讲解了通过分析索引了解0和1的存储机制,值得学习一下。
bisal
2023/01/13
9970
Java中的大量if else语句的替代方案
之前写过转载过一篇类似的不错的文章《除代码中的 if-else/switch-case的正确姿势》https://blog.csdn.net/w605283073/article/details/89117561,
明明如月学长
2021/08/31
1.8K0
Linux 中 cron 系统的 4 种替代方案
cron 适用于长期重复任务。如果你设置了一个工作任务,它会从现在开始定期运行,直到计算机报废为止。但有些情况下你可能只想设置一个一次性命令,以备不在计算机旁时该命令可以自动运行。这时你可以选择使用 at 命令。
用户1880875
2021/09/07
2.5K0
Base:Acid的替代方案
作者:DAN PRITCHETT 译者:java达人 来源:https://queue.acm.org/detail.cfm?id=1394128(点击阅读原文前往) 在数据库分区中,以一致性换取可
java达人
2018/03/26
2.3K0
Base:Acid的替代方案
Web 框架的替代方案
在本系列第二部分中,Noam 提出了一些模式,说明如何直接用 Web 平台作为框架提供的一些解决方案的替代方案。
深度学习与Python
2022/04/19
2.6K0
Hugo .GitInfo 的替代方案
今天有人问我博客页脚 footer 里的 git hash 是怎么显示的,就是页面底部里的 69d6ffe 这一串数字。
eallion
2022/12/20
1.9K0
Hugo .GitInfo 的替代方案
如何将SQLServer2005中的数据同步到Oracle中
有时由于项目开发的需要,必须将SQLServer2005中的某些表同步到Oracle数据库中,由其他其他系统来读取这些数据。不同数据库类型之间的数据同步我们可以使用链接服务器和SQLAgent来实现。假设我们这边(SQLServer2005)有一个合同管理系统,其中有表contract 和contract_project是需要同步到一个MIS系统中的(Oracle9i)那么,我们可以按照以下几步实现数据库的同步。
深蓝studyzy
2022/06/16
3K0
oracle number数据类型的精度
p: 1—38 s: -84—127 a、s > 0 (精确到小数点右边 s 位,并四舍五入 。然后检验有效数位是否 <= p) 例如:number(5,2) 有效数字最多是5位,保留小数点后2位; 123.45 — 123.45 123 — 123.00 1.2356 — 1.24 0.001 — 0.00 b、s < 0 (精确到小数点左边 s 位,并四舍五入 。然后检验有效数位是否 <= p + |s|) 例如:number(5,-2) 小数点左边最后2位四舍五入,最多7位有效数字 123456 — 123460 1234567.6789 — 1234600 1 — 0 总结:在 p < s 这种情况下 只能用来存放大于0小于1的小数。 在 p > s 这种情况下 小数点前最多只能插入:p – s个数字,但小数点后的数字可以是任意长度(保存时会四舍五入)
全栈程序员站长
2022/09/15
1.3K0
Oracle number类型的语法和用法
摘要:先根据精度值,对number类型的数据从左边第一个非零数字开始数精度值个位数,之后的位数截断不要(要四舍五入吗),再根据小数位置值,对number类型的数据右边的低位进行四舍五入(如果小数位置值为负的,如何处理?)
全栈程序员站长
2022/09/15
2.3K0
CentOS 8/6 Linux 生命终结,2022 年最好的替代方案是什么?
◆ 前言 Red Hat 最近宣布,CentOS 8 Linux将不再支持并在 2021 年底停止使用。取而代之的是滚动版本 CentOS Stream 作为 RHEL 的下游分支于 2019 年推出,将持续排查漏洞,让上游版本更加稳定和安全。 但是,运行 CentOS 7 的服务器不会受到影响。他们将与 RHEL 7 生命周期并行更新。RHEL 7 将在 2024 年结束其最后一个维护周期。 但是,如果您使用的是 CentOS 8,那么 2022 年有哪些替代方案?不幸的是,即使您找到了,服务器应用程序的
IT大咖说
2022/03/08
6.4K0
oracle number转为timestamp timestamp转number
现在平台有个字段是用来记录插入时间的,但是是用number型存储,想转为时间类型的。 结果: SELECT TO_CHAR(字段名 / (1000 * 60 * 60 * 24) + TO_DATE(‘1970-01-01 08:00:00’, ‘YYYY-MM-DD HH24:MI:SS’), ‘YYYY-MM-DD HH24:MI:SS’) AS CDATE FROM 表名; 解决问题的过程: http://blog.csdn.net/a9529lty/article/details/5306622
全栈程序员站长
2022/09/15
2.1K0
Oracle number数据类型的使用[通俗易懂]
第一种情况: number后面都是两个正数,第一个数表示有效位,第二个数表示小数点后的位数(也就是精确度,需要进行四舍五入) 例如
全栈程序员站长
2022/09/15
6040
点击加载更多

相似问题

Spring数据-@修改(clearAutomatically= true,flushAutomatically = true)导致另一个实体不被更新

11

我可以在接口上使用spring注解吗?

14

调试时,我可以“跳过”jQuery代码吗?

51

我可以将注解注入pojo吗?

11

使用Kwargs时,我可以在Python中跳过参数吗?

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文