jOOQ 和缓存?

2024-01-09

我正在考虑从 Hibernate 迁移到 jOOQ,但我不确定是否可以不使用缓存。休眠有一个一级、二级缓存 https://stackoverflow.com/questions/337072/what-are-first-and-second-level-caching-in-hibernate。我知道 jOOQ 确实有支持重用准备好的语句 http://www.jooq.org/doc/3.6/manual/sql-execution/reusing-statements/.

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


查询缓存/结果缓存:

我提到这一点是因为这种缓存是也可以使用 Hibernate http://apmblog.dynatrace.com/2009/02/16/understanding-caching-in-hibernate-part-two-the-query-cache/,并且在某些情况下可能有意义。

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

  • 使用 jOOQ 的 MockDataProvider 破解一个简单的 JDBC 结果集缓存 http://blog.jooq.org/2015/03/26/hack-up-a-simple-jdbc-resultset-cache-using-jooqs-mockdataprovider
  • 使用 JOOQ 和 Redis 在 Java 中进行缓存 http://aakashjapi.com/caching-with-jooq-and-redis

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

一级缓存:

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

换句话说:只有限制查询语言的功能和范围,并且控制ALL你的数据库交互,就像 Hibernate 的方式一样。 jOOQ 明确不这样做。

二级缓存:

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

ORM 完全没有理由实现这种缓存,因为在简单情况下不方便。但在许多情况下,您最好用以下方式注释服务方法@Cacheable,例如如本 Spring 页面上所述 https://spring.io/blog/2014/04/14/cache-abstraction-jcache-jsr-107-annotations-support。这将是比 ORM/查询层更高的层上的缓存,您将能够将缓存与业务逻辑更紧密地关联起来。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jOOQ 和缓存? 的相关文章

  • OpenJDK 11 问题 - 客户端在上次 UNWRAP 之前完成握手

    我正在将代码库从 Oracle Java 1 8 0 131 迁移到 OpenJDK 11 0 1 我们有实现 nio ssl 套接字通道的代码 在 Java 8 中 客户端 服务器握手工作正常 在 Java 11 中 客户端在解包来自服务
  • Java 9 中 java.se 模块的意义是什么?

    为什么 java 9 模块系统有 java se 模块 它对其他模块具有传递依赖关系 这与 Java 9 之前的世界中依赖整个 rt jar 不一样吗 module java se requires transitive java desk
  • setSize() 不起作用?

    我有一个程序 需要两个按钮 一个是常规按钮 另一个具有根据鼠标悬停而变化的图片 目前 由于图片很大 JButton自定义也很大 我可以更改自定义的大小并保持图像 和翻转图像 成比例吗 我尝试过 setSize 但它没有任何作用 对于任何反馈
  • spring-data-neo4j 基本一对多关系不持久

    EDIT 示例项目可在github https github com troig neo4jCustomRepository 我在后端项目中使用 Neo4J Rest 图形数据库 托管在 grapheneDb 中 和 Spring Data
  • 如何在线程和小程序中使用双缓冲

    我有一个关于何时调用绘制和更新方法的问题 我有游戏小程序 我想在其中使用双缓冲 但我无法使用它 问题是 在我的游戏中 有一个球在 run 方法内移动 我想知道如何使用双缓冲来交换屏幕外图像和当前图像 请有人帮忙 当同时存在 update 和
  • 如何实现可运行队列

    我正在尝试实现一个可运行队列 在异步任务期间依次执行 意味着队列中的下一个将在另一个完成后执行 我编写了一个管理器来管理这些可运行对象和本身就是可运行对象的任务 然后 我获取异步任务中的第一个任务并运行它 希望它能够在队列中运行 但是它最终
  • Struts ActionForm 属性应该是什么类型?

    我使用 Struts 1 2 4 继承了这个巨大的遗留 Java Web 应用程序 我有一个关于 ActionForms 的具体问题 其中一些仅具有字符串属性 即使对于数字 其中一些使用看似合适的类型 整数 日期 字符串等 这里的最佳实践是
  • 动态更新 LookAndFeel 值

    我希望能够动态更新 Swing GUI 的 LookAndFeel 属性 在本例中 我有一个简单的 Swing Awt 游戏 运行最初为 Nimbus 的游戏LookAndFeel 在启动后的各个时刻 我只想更改 比方说 一个细节 应用程序
  • 我可以直接在 Maven 中使用 GitHub 项目吗?

    我有兴趣使用GitHub 上的项目 https github com toelen spymemcached jcache作为我的项目中的依赖项 GitHub 项目有一个pom文件 我可以修改我的pom文件来使用这个项目 如果是这样 怎么办
  • Windows:如何获取所有可见窗口的列表?

    无论如何都要使用相关技术重新标记 我不知道它们是什么 稍后我可能会提出更详细的问题 关于具体细节 但现在我正在尝试掌握 大局 我正在寻找一种方法来枚举 Windows 上的 真实可见窗口 我所说的 真正可见的窗口 就是指 用户所说的 窗口
  • Jersey/JAX-RS:如何自动使用@Valid递归级联bean验证?

    我正在 Jersey 的 REST 资源端点中验证我的 POJO public class Resource POST public Response post NotNull Valid final POJO pojo public cl
  • 从 API Explorer 调用 API 方法时不允许使用范围

    我在 Google App Engine 中有一个奇怪的行为 我正在使用 Eclipse 和 Java 进行开发 特别是使用 Google Cloud Endpoints 我使用以下设置创建了一个示例 API 实际上 我正在使用许多其他示波
  • Hibernate - 如何通过 Hibernate 将 java.net.URL 存储到数据库中

    我有一块田地URL countryURL in a Country班级 我想将其数据存储到COUNTRY通过 Hibernate 将表存储在数据库中 哪个休眠type我应该在休眠映射文件中使用
  • SSLHandShakeException 没有适当的协议

    我最近向我的网站添加了 SSL 可以通过 https 访问它 现在 当我的 java 应用程序尝试向我的网站发出请求并使用缓冲读取器从中读取时 它会生成此堆栈跟踪 我没有使用自签名证书 该证书来自 Namecheap 它使用 COMODO
  • 如何强制刷新 CallLog.Calls.CACHED_NAME 列?

    我的目标是从通话记录中收集所有未知的电话号码 这可以通过以下代码来实现 private static final String CALLOG PROJECTION CallLog Calls ID CallLog Calls CACHED
  • 如何使用 log4j2.xml 配置 hibernate 日志记录?

    我最近切换到 Apache log4j2 但仍然找不到使用 log4j2 xml 配置 hibernate 日志记录的方法 因为我找不到解决此问题的方法 所以我仍然显式使用 log4j properties 文件进行休眠 这不是最好的解决方
  • 异步方法的同步版本

    在 Java 中创建异步方法的同步版本的最佳方法是什么 假设您有一个包含这两种方法的类 asyncDoSomething Starts an asynchronous task onFinishDoSomething Called when
  • 运行外部进程的非阻塞线程

    我创建了一个 Java GUI 应用程序 它充当许多低级外部进程的包装器 该实用程序按原样运行 但迫切需要一项重大改进 我希望我的外部进程以非阻塞方式运行 这将允许我并行服务其他请求 简而言之 我希望能够在生成数据时处理来自外部进程的数据
  • Spring Boot 和安全性以及自定义 AngularJS 登录页面

    我正在为 Spring Security 实现一个自定义 AngularJS 登录页面 但遇到身份验证问题 遵循本教程 示例 以及他们的示例在本地运行良好 https github com dsyer spring security ang
  • Java 和 SQL Server 中的精度噩梦

    我一直在与 Java 和 SQL Server 中的精确噩梦作斗争 直到我不再知道了 就我个人而言 我理解这个问题及其根本原因 但向地球另一端的客户解释这一点是不可行的 至少对我来说 情况是这样的 我在 SQL Server 中有两列 Qt

随机推荐

  • http-equiv="refresh" 是否保留引用信息和元数据?

    如果我设置一个这样的页面 执行重定向时浏览器是否会发送引用者信息和其他元数据 此处测试时 Firefox 和 IEdo not但铬does发送引荐来源网址 尽管这也不一致 无论它是否发送到同一域 因为我找不到任何说明什么的规范should是
  • MVC 的缓存层 - 模型还是控制器?

    我正在重新考虑在哪里实现缓存部分 您认为最合适的实施地点在哪里 在每个模型中 还是在控制器中 方法 1 伪代码 mycontroller php MyController extends Controller class function
  • 从 ActivityGroup 开始ActivityForResult?

    尝试从活动组启动活动时 我似乎无法得到任何结果 我已将 onactivityresult 放入活动和活动组中 具体来说 我试图让用户从 Intent ACTION GET CONTENT 中选择照片 视频 但我从来没有得到任何回报 我究竟做
  • 对于给定的有限代表字符串列表,正则表达式的语法推理?

    我正在分析一个大型公共数据集 其中包含许多详细的人类可读字符串 这些字符串显然是由某些常规 在形式语言理论意义上 语法生成的 逐一查看这些字符串组以了解其中的模式并不太难 不幸的是 大约有 24 000 个独特的字符串被分为 33 个类别和
  • 在 Jersey JAX-RS 服务器中返回大对象时如何设置 Content-Length

    我有时想返回一个大的 几个 MB 二进制对象作为 JAX RS 资源方法的响应 我知道对象的大小 并且希望在响应上设置 Content Length 标头 并且不希望使用分块传输编码 在 Jersey 1 x 中 我使用自定义 Messag
  • Serde 反序列化为多个结构之一?

    有没有一种好的方法可以暂时将 JSON 反序列化为不同的结构 在文档中找不到任何内容 不幸的是 结构有 标签 来区分 如下所示如何有条件地将 JSON 反序列化为枚举的两个不同变体 https stackoverflow com quest
  • pandas 中 header 和 Skiprow 的区别不清楚

    任何人都可以用一个很好的例子来详细说明 header 和skiprows 在语法中的区别 pd read excel 名称 标题 数字 skiprows 数字 您可以关注本文 https towardsdatascience com imp
  • 更新状态 - 为什么在调用 setState 时创建新的状态副本?

    反应文档 永不变异this state直接调用setState 然后 可能会取代你所做的突变 对待this state就好像它是 不可变的 很清楚 class App extends React Component state data 以
  • Django 管理命令在 cron 中不起作用

    我在安排时间时遇到问题manage py celery call myapp tasks mytask对于我的用户 crontab 当 cron 尝试运行该作业时 它会在 stderr 中获取此信息 它会邮寄给我 如 var mail ka
  • Android 对话框中的 EditText

    我已经在对话框中进行了编辑文本 但无法更改高度 AlertDialog Builder editalert new AlertDialog Builder this editalert setTitle messagetitle edita
  • 将颠覆存储库编号放入代码中

    我想实现一种在代码中记录项目版本的方法 以便在测试时使用它并帮助跟踪错误 看起来最好使用的版本号就是 Subversion 的当前修订版号 有没有一种简单的方法可以将这个数字挂接到 在我的例子中是C 头文件或其他文件中 然后我可以在代码中获
  • 安装 GitHub 应用程序时在私有存储库中搜索时出现“验证失败”错误

    我创建了一个 GitHub 应用程序并将其安装在我的帐户中 使其能够访问我帐户中的私有存储库 GitHub 应用程序具有元数据的读取权限 然后 我按照此处的步骤生成了 JWT 并使用它来创建安装访问令牌 我尝试使用此令牌使用 GitHub
  • java中奇怪的平等行为[重复]

    这个问题在这里已经有答案了 看看下面的代码 Long minima 9223372036854775808L Long anotherminima 9223372036854775808L System out println minima
  • ||= 在 Ruby 中做什么[重复]

    这个问题在这里已经有答案了 我使用 Ruby 一段时间了 我不断看到这样的情况 foo bar 它是什么 这将分配bar to foo如果 且仅当 foo is nil or false 编辑 或者错误 谢谢 mopoke
  • VSCode 构建不起作用 - 未定义构建任务。在tasks.json 文件中使用“isBuildCommand”标记任务

    我全新安装了 VSCode 和这个小型的基本 TypeScript 应用程序 第一次 当我想要构建应用程序时 VScode 需要生成tasks json 而且它在很久以前就起作用了 今天我收到这个奇怪的消息 未定义构建任务 在tasks j
  • 如何使用 JDBC 读取 mysql 中的 JSON 数据类型

    Mysql 5 7 引入了 JSON 数据类型 它提供了大量的查询功能 由于没有兼容的结果集函数 我如何以及如何使用检索存储在此数据类型中的数据 它应该是rs getString 因为getString与一起使用VARCHAR TEXT 我
  • Rails4:image_url 未在 scss 中生成摘要

    我不明白为什么我的 css 文件没有使用辅助方法将摘要附加到我的资产中image url 我的资产已正确预编译 并且文件确实包含摘要 我还可以手动访问它们 使用摘要的网址 最奇怪的是 一开始它是有效的 这是我的配置 config asset
  • 实体框架预加载过滤器

    我有一个简单的查询 我想这样做 1 Products have ChildProducts其中有PriceTiers2 我想得到所有Products有一个Category with a ID1 和Display true 3 我想包括所有C
  • 视图的内边距和边距之间的区别

    视图的边距和填充有什么区别 帮助我记住的含义padding 我想到一件有很多的大衣厚棉垫 我在外套里面 但我和我的棉衣是在一起的 我们是一个单位 但要记住margin 我想 嘿嘿 给我一点余地吧 这是我和你之间的空白 不要进入我的舒适区 我
  • jOOQ 和缓存?

    我正在考虑从 Hibernate 迁移到 jOOQ 但我不确定是否可以不使用缓存 休眠有一个一级 二级缓存 https stackoverflow com questions 337072 what are first and second