gpt4 book ai didi

Grails Hibernate 过滤器 findById(id) 与 get(id)

转载 作者:行者123 更新时间:2023-12-02 13:46:37 28 4
gpt4 key购买 nike

我正在使用休眠过滤器根据登录名过滤我的域类。

它按预期工作

<DomainClass>.findById(<id>)

但它不适用于
<DomainClass>.get(<id>).

为什么过滤器不用于获取第二个版本?

最佳答案

嗯,我找到了一个具体的explanationBurt 制作对于几年前的这个问题。get() (和 read() ,它使用 get() 并将实例设置为只读)是唯一始终使用二级缓存的方法。 load()也会,但它没有映射到 GORM 中。所有其他方法都是条件查询或 HQL 查询的变体,支持使用查询缓存(与 get() 使用的实例缓存分开)但默认情况下不使用它。
这很容易测试。在 DataSource.groovy 中开启基本的 sql 日志记录:

dataSource {
pooled = true
driverClassName = ...
...
loggingSql = true
}
并创建一个简单的缓存类:
class Thing {
String name
static mapping = {
cache true
}
}
运行 grails console并创建一个实例:
def thing = new Thing(name: 'foo').save()
然后使用 findById() 加载它并注意重复调用每次都会生成 SQL:
println Thing.findById(1L).name
并使用 get() 加载它并注意只有第一次调用会生成 SQL,而重复调用不会:
println Thing.get(1L).name
然后您可以调用 findById()再次,即使该实例被缓存,它仍然每次都会访问数据库。”
就我而言,它的工作原理完全一样。

关于Grails Hibernate 过滤器 findById(id) 与 get(id),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31988362/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com