gpt4 book ai didi

java - jOOQ 和缓存?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:55:33 26 4
gpt4 key购买 nike

我正在考虑从 Hibernate 迁移到 jOOQ,但我不确定是否可以不使用缓存。 Hibernate 有一个 first- and second-level cache .我知道 jOOQ 确实有 support for reusing prepared statements .

如果我使用 jOOQ,我是否必须自己处理缓存?

最佳答案

查询缓存/结果缓存:

我提到这个,因为这种缓存是also possible with Hibernate ,在某些情况下它可能有意义。

在Hibernate 中,查询缓存与二级缓存紧密配合。在 jOOQ 中,您可以使用 jOOQ VisitListener API 实现拦截所有查询的查询缓存。有一些关于这个主题的博客文章:

将来会更好地支持这种类型的缓存(jOOQ 3.7 还没有),因为这种缓存属于 SQL API。请注意,您的 JDBC 驱动程序可能也已经支持这种缓存 - 例如ojdbc 确实如此。

一级缓存:

Hibernate 的一级缓存背后的想法对于像 jOOQ 这样更面向 SQL 的 API 没有意义。 SQL 是一种高度复杂的语言,它在实际持久化的实体和相同实体的客户端表示之间工作。这意味着一旦您使用 SQL,您可能会创建与数据的原始实体表示无关的临时元组。

换句话说:一级缓存只有在您限制查询语言的功能和范围并且控制所有您的数据库交互时才有可能,这种方式 hibernate 做到了。 jOOQ 明确表示不会那样做。

二级缓存:

Hibernate 中的二级缓存主要用于主数据和类似类型的数据,因为数据不会更改,因此从数据库中获取数据几乎没有意义。

完全没有理由,为什么 ORM 应该实现这种缓存,在简单的情况下不方便。但在许多情况下,最好用 @Cacheable, e.g. as documented here on this Spring page 注释服务方法。 .这将是比 ORM/查询层更高层的缓存,您将能够将缓存与您的业务逻辑更紧密地关联起来。

关于java - jOOQ 和缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32690718/

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