首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用7联接、JPA还是SQL进行高效查询?什么样的收藏品?

使用7联接、JPA还是SQL进行高效查询?什么样的收藏品?
EN

Stack Overflow用户
提问于 2015-06-17 13:40:11
回答 1查看 284关注 0票数 0

伙计们!

必须使用7 joins对昂贵的JPA查询进行性能调优,在本地完成需要42秒,在远程服务器(AWS)中需要3分钟。

SELECT res FROM Resultado res JOIN res.panoramica pan JOIN pan.gondolaId gon JOIN gon.visitaId vis JOIN vis.estabelecimentoId estab JOIN estab.cliente cli JOIN res.configuracaoAnalise ca JOIN vis.usuarioId usu

将其修改为一个完整的原生SQL查询(选择与联接中的每个表关联的所有字段),时间缩短到不到一毫秒。在使用这种方法时,我失去了JPA的易用性,因为fullQuery方法返回List<Object[]>,但是性能确实是最重要的。

当将值(由fullQuery返回)分配给托管bean中的列表时,需要10秒,列表现在有20万个元素。

在这种情况下,最建议的选择是什么?

已解决:

由于@dcsohl的回答,它适用于以下几个方面:

代码语言:javascript
运行
复制
@SqlResultSetMapping(
name="ResultadoJoin"
,entities={
    @EntityResult(entityClass=Resultado.class)
    ,@EntityResult(entityClass=Panoramica.class)
    ,@EntityResult(entityClass=ConfiguracaoAnalise.class)
    ,@EntityResult(entityClass=Gondola.class)
    ,@EntityResult(entityClass=Visita.class)
    ,@EntityResult(entityClass=Estabelecimento.class)
    ,@EntityResult(entityClass=Usuario.class)
    ,@EntityResult(entityClass=Equipe.class)
    }
)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-17 15:23:09

您可以说本机SQL查询在不到毫秒的时间内运行。那就坚持下去吧。但这并不意味着你必须与来自query.getResultList()的列表做斗争。

您可以执行本机查询(无论是从EntityManager.createNativeQuery()还是从EntityManager.createNamedQuery()执行,并且仍然让JPA为您构造对象。

指定一个@SqlResultSetMapping,指定您希望使用的@Entity类,这些类将根据查询的结果为您创建。我不知道您的模式或实体,因此,我恐怕目前无法更进一步。如果您的@Entity类进行了适当的配置,并且在结果集中没有重复的列名,则可以将简化为

代码语言:javascript
运行
复制
@SqlResultSetMapping(name = "MyNativeQuery",
    entities = {
        @EntityResult(entityClass = Entity1.class),
        @EntityResult(entityClass = Entity2.class),
        @EntityResult(entityClass = Entity3.class),
        @EntityResult(entityClass = Entity4.class),
        @EntityResult(entityClass = Entity5.class),
        @EntityResult(entityClass = Entity6.class),
        @EntityResult(entityClass = Entity7.class)
    }
)

但是,您可能需要将fields参数包含到@EntityResult中,提供@FieldResult项的列表,以使一切正常。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30893362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档