我之所以提到这一点,因为Hibernate也可以使用这种缓存,在某些情况下它可能是有意义的.
在Hibernate中,查询缓存与二级缓存密切配合.在jOOQ中,您可以实现使用jOOQ VisitListenerAPI 拦截所有查询的查询缓存.有一些关于这个主题的博客文章:
将来会有更好的支持这种类型的缓存(不是在jOOQ 3.7中),因为这种缓存属于SQL API.请注意,您的JDBC驱动程序可能也支持这种缓存 - 例如ojdbc.
Hibernate的第一级缓存背后的想法对于像jOOQ这样更面向SQL的API没有意义.SQL是一种高度复杂的语言,可以在实际持久化的实体和相同实体的客户端表示之间起作用.这意味着一旦使用SQL,您可能会创建与数据的原始实体表示无关的特殊元组.
换句话说:只有在限制查询语言的功能和范围时才能实现一级缓存,如果您控制所有数据库交互,就像Hibernate一样.jOOQ明确表示不这样做.
Hibernate中的二级缓存是一个缓存,主要用于主数据和类似类型的数据,从数据库中提取数据几乎没有意义,因为数据不会改变.
没有任何理由,为什么ORM应该实现这种缓存,在简单的情况下不方便.但在许多情况下,最好使用@Cacheable例如本春季页面上记录的服务方法来注释服务方法.这将是更高层上的缓存而不是ORM /查询层上的缓存,您可以将缓存与业务逻辑更紧密地关联.
| 归档时间: |
|
| 查看次数: |
2531 次 |
| 最近记录: |