繁体   English   中英

Spring JPA 是否对当前上下文/请求中已经检索到的缓存实体做任何聪明的事情?

[英]Does Spring JPA do anything smart with caching entities already retrieved in the current context/request?

如果我有一个实体Product和一个将product作为字段的实体Order ,并且在处理来自 Controller 的请求时, Product product = order.getProduct()的结果是否会在整个调用过程中被缓存,即使该方法调用本身的结果不再被赋值? 假设product没有被修改并且可以被安全丢弃。

即类似的东西:


Product product = order.getProduct();
doOtherStuff(order);


void doOtherStuff(Order order) {
    Product product = order.getProduct();
}

后者调用order.getProduct()总是/从不/通常/有时会导致另一个数据库调用吗? 这样做的条件是什么? 假设 Spring 启动应用程序。

我意识到我可以看到一行代码的数据库查询,但我的目标是了解它背后的机制。

您可以通过将这些属性添加到application.properties文件来激活选项以显示所有执行的查询。

logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

然后你可以看到它是否执行了两次查询。

简短地说,根据我的经验,它不会缓存任何东西 因此,每次您进行调用时,它都会执行对 DB 的查询/调用。

您可以在 Spring 引导中检查缓存:

https://www.baeldung.com/spring-cache-tutorial

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM