Hibernate JOIN FETCH - 对象在结果集中出现多次

2024-06-18

我正在使用 Spring JPA 和 Hibernate 构建 REST API。我搜索了 2 天,但没有找到任何解决方案来解决这个问题。

在某些查询中,我有多个 JOIN FETCH 子句。当我执行查询时,我的结果集中多次出现父对象,实际上与父亲有孩子的频率一样多。
例子:

    @Query("SELECT DISTINCT p AS post," +
        " <some subquery>" +
        "FROM Post p  JOIN FETCH p.user u LEFT JOIN FETCH p.linkedUsers INNER JOIN FETCH p.track track  " 
        "WHERE ( (<some condition>) OR p.user = :me) " +
        "ORDER BY p.created DESC")
List<Object []> getData(@Param("me")User me,
                                 Pageable pageable);

例如,如果我的帖子有 2 个链接用户,我的帖子将在我的结果集中至少出现 2 次。 如果我不执行 JOIN FETCH 或其他 JOIN,则会延迟加载数据。但这不是我的目标,因为它会导致糟糕的表现。

编辑:所以我的问题是,如何执行一个查询,其中获取所有数据并且满足指定条件的所有帖子在我的结果集中仅出现一次。

Edit:

示例对象是:

 [{
    "id": 1767,
    "track": {
        "id": 1766,
        "title": "VVS",
        ...
        "streams": [
            {
                "id": 1764,
                 ....
            },
            {
                "id": 1765,
                  ...

            }
        ],
        "isrc": "DEQ021801393"
    },
    "user": {
        "id": 999998,
        "username": "My username",
         ....

    },
    "created": "2018-08-21T22:18:56.451Z",
     ...
    "linked_users": []
},
<this object another time, beacause two stream objects in track>
<many other objects two times>
...
]

Edit:

事实证明,子查询与“不同”是冲突的。如果我从查询中删除它们,我会得到不同的帖子。 如果我编辑本机 sql 查询并将“distinct”更改为“distinct on”,它就可以工作。但我认为休眠中不存在“distinct on”子句。那么有什么好的想法可以做什么吗?

我将不胜感激任何帮助 :)


在jpa 2.1中,它支持实体图来解决“重复和N+1问题”

@NamedEntityGraph(name = "graph.Order.items", 
               attributeNodes = @NamedAttributeNode(value = "items", subgraph = "items"), 
subgraphs = @NamedSubgraph(name = "items", attributeNodes = @NamedAttributeNode("product")))

使用实体图加载数据:

Map hints = new HashMap();
hints.put("javax.persistence.fetchgraph", graph);

return this.em.find(Order.class, orderId, hints);

更多详情:

https://www.thoughts-on-java.org/jpa-21-entity-graph-part-1-named-entity/ https://www.thoughts-on-java.org/jpa-21-entity-graph-part-1-named-entity/

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

Hibernate JOIN FETCH - 对象在结果集中出现多次 的相关文章

随机推荐

  • DateTimeOffset 到 DateTime 转换 - 数据丢失

    当我将 datetimeoffset 值转换为 datetime 值时 是否有可能丢失数据 从MSDN文档中 提到从datetimeoffset到datetime的转换如下 DateTime 属性最常用于执行 DateTimeOffset
  • 主页加载方式与其他页面不同[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 为什么我的主页宽度是 1024 px
  • 在 Tomcat 8 上配置 SSL 并连接超时

    我设置了一个密钥库并从 openssl com 获得了 SSL 证书 我遵循的具体步骤在这里 https drive google com file d 0B6PUGo7cBLcDTzdkc0pzT2pTMk0 view usp shari
  • 如何在android中将视频格式mov转换为3gp或mp4 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 谁能告诉我如何在 android 中将视频格式 mov 转换为 3gp 或 mp4 有人可以提供示例吗 Thanks Android本身不具备这样的功
  • 如何更改jqGrid的主题?

    我正在寻找更改当前版本的 jqGrid 主题的方法 我最近开始在 ASP Net MVC 2 应用程序中使用 jqGrid 并下载一些演示解决方案 项目 我尝试通过更改主题 ui javascript 来更改网格的主题 但这对我不起作用 看
  • 如何更改 Visual Studio 2013 安装目录

    有一个关于 Visual Studio 2012 的问题 尽管它为我提供了提示 但它没有回答 VS 2013 的相同问题 由于我没有足够的声誉来回答这个问题 但对 VS 2013 有一个可行的答案 所以我将提出问题并做出回应 这是背景 我将
  • iOS 无状态/无值进度条?

    我希望在 iOS 中获得无状态 无值的 UIProgressView 或其他类型的进度条 我尝试查找一些文档 但找不到与我的问题相关的任何内容 如果你们有任何建议 我很想听听 Thanks Shai iOS s UI进度视图 https d
  • 无法在 OSX 上使用 eclipse for android 链接到 cocos2dx

    我以前从来没有花这么多时间来初始设置开发环境 这有点荒谬 我正在尝试运行cocos2dx附带的演示代码 我在用着 ADK 附带的 eclipse 风格 cocos2d 2 1beta3 x 2 1 0 ndk r8c 我尝试使用 creat
  • 获取自定义属性的值

    如何使用 JavaScript 获取自定义属性的值 Like strong 我试过了 getAttribute 和 jQuery 的 attr 没有成功 您可以使用纯 JavaScript 来完成此操作 document getElemen
  • 递归追加到切片不起作用

    我正在尝试学习 Go 但我不明白为什么递归调用堆栈末尾的这段代码返回一个空切片 有帮助吗 还tmp甚至似乎没有在调试器中注册 func main input 3 int 4 6 7 expected 6 7 4 6 7 4 6 4 7 fm
  • XNA 窗口调整大小调用 LoadContent

    每当我将 XNA 窗口大小调整到尽可能小的分辨率 0 像素高 时 程序都会再次开始调用 LoadContent 这会导致我的应用程序崩溃 因为我只希望它加载内容一次 我能做什么 有没有办法阻止用户过度调整窗口大小 例如 Java 中的 se
  • 如何呈现半屏模态视图?

    我有一个 UIViewController 当按下按钮时 我想要一个半屏视图向上滑动 其中有一个 UIPicker 我在 IB 中使用 UIPicker 和带有 完成 取消 按钮的 UIToolBar 制作了一个 UIView 我怎样才能做
  • 石墨烯错误消息

    我想知道是否可以翻译石墨烯提供的验证错误消息 例如 未提供身份验证凭据 如下面的代码示例所示 errors message Authentication credentials were not provided locations lin
  • 如何从 SQL Server 存储过程返回值并在 Access VBA 中使用它们

    我已经在 SQL Server 中设置了一个运行良好的存储过程 我现在可以从 VBA 调用它 但想返回一个值以了解是否存在任何错误等 我的 SP 中的最后一个参数设置为 OUTPUT DataSetID int 0 Destination
  • 如何使用 Jquery mobile 进行移动分析

    我正在寻找一个好的解决方案来为 Jquery mobile 进行移动分析 我确实检查了这个问题 Flurry Analytics 与移动平台上的 Google Analytics https stackoverflow com questi
  • 如何在 Go 中从 stdin 解析无限 json 数组?

    我正在尝试编写一个 i3status 的小替代品 一个与 i3bar 兼容的小程序进行通信this http i3wm org docs i3bar protocol html协议 他们通过标准输入和标准输出交换消息 两个方向的流都是一个无
  • 在 Google 地图中映射 400MB KML 数据 - 如何?

    Re 我有一个 400MB 大的 KML 文件 1 周的旅行和 5000 公里的记录 它已经去除了非必要的数据 压缩后的 GPX 文件大小约为 80MB 或 2 5MB KML 文件大约 30MB 我不确定有多少个航点 但肯定有数十万个 我
  • LoginAsync 缺失

    我编写了一个 Android 应用程序 它使用 Azure 执行用户登录 Google Twitter 和 Facebook 的操作 它用Microsoft WindowsAzure MobileServices Android dll这样
  • 在具有不平衡数据的管道中进行交叉验证的正确方法

    对于给定的不平衡数据 我创建了一种不同的标准化管道和一种热编码 numeric transformer Pipeline steps scaler StandardScaler categorical transformer Pipelin
  • Hibernate JOIN FETCH - 对象在结果集中出现多次

    我正在使用 Spring JPA 和 Hibernate 构建 REST API 我搜索了 2 天 但没有找到任何解决方案来解决这个问题 在某些查询中 我有多个 JOIN FETCH 子句 当我执行查询时 我的结果集中多次出现父对象 实际上