java - Jpa/Hibernate:避免在每个关系都是唯一的实体中的所有连接表上连接
问题描述
简单的例子。
表资源。表 Line_A。表 Line_B。
连接表 Resource_Line_A 连接表 Resource_Line_B
Line_A 的资源无法附加到 Line_B,反之亦然。
如果我想在 2021 年将所有资源附加到 Line_A,我可以在本机 sql 中编写
Select * from Resource r join Resource_Line_A rla on r.id = rla.resource_id join Line_A la on rla.line_a_id = la.id where la.year = 2021
在带有存储库的 Java 中,我有lineARepository.findByYear(2021),但 Hibernate 向我展示了这个查询
Select * from Resource r join Resource_Line_A rla on r.id = rla.resource_id join Line_A la on rla.line_a_id = la.id join Resource_Line_B rlb on r.id = rlb.resource_id join Line_B lb on rlb.line_b = lb.id where la.year = 2021
如何避免 Line_B 表上的无用连接?所有关系都是 fetchtype.Lazy
解决方案
我猜你正在使用@OneToOne(mappedBy = "..", fetch = LAZY)
for lineB
?如果是这样,您必须知道 Hibernate 5.3 有一个在 5.4 中修复的错误,导致此类关联被急切地获取。
推荐阅读
- macos - .htaccess
我正在尝试在我的 Mac 上使用http://crud-admin-generator.com/设置 crud 应用程序所以我按照上面链接中的步骤来生成所有实体。在运行服务器时,我需要在我的 mac 上设置 .htac
- c# - C# - WPF - 改变我的窗口的继承
- ruby-on-rails - docker 中的 Capybara 无头 chrome 返回 DevToolsActivePort 文件不存在
- clang - 未定义符号:__asan_option_detect_stack_use_after_return
- c# - 如何验证多个 Ajax 加载的部分视图?
- javascript - 如何观察向 div 添加类
- python - 用 cython 包装一个 double** c++ 函数
- python - from google.cloud import monitoring_v3 ImportError: cannot import name monitoring_v3
- java - Java 找不到符号类 Random
- node.js - WebSocket 代理因 Node.js 和 Angular 而失败。意外响应代码:404