java - Hibernate需要很长时间才能得到查询结果

每当我查询一个让 Spring Data/Hibernate 在我的代码上构建查询“findByLabelAndUserId”的表时,它似乎总是要花很长时间。

我在 sql server 上测试查询,它立即返回结果。

当我在我的项目上测试查询时,获取 10 行花费了 4 多秒。

以下是我想做的事情: 使用@Query,但这将花费太长时间来更改许多方法。 我添加了一个全参数构造函数,但没有任何改变。 我将获取方法从急切更改为懒惰但没有任何变化

我试图在 jdbc url 中设置这个属性:sendStringParametersAsUnicode=false

它减少了 0.5 秒的时间,但这还不够。

这是我的代码:LeaveController:

@RequestMapping(value = "/leaves-management/leaves", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
@PreAuthorize("hasAuthority('view_MY_LEAVE')")
public List<LeaveDto> getAllByUser(HttpServletRequest httpRequest) {
    String token = httpRequest.getHeader(tokenHeader);
    String username = jwtTokenUtil.getUsernameFromToken(token);
    User user = userService.findByUsername(username);
    List<Request> listRequests = requestService.findByLabelAndUserId(LabelRequest.LEAVE, user.getId());
    return listModelToListDtoWithStatus(listRequests);
}

实体部分:

public class Request extends AbstractAuditEntity {
    
    @Column(nullable = false)
        @Enumerated(EnumType.STRING)
        private LabelRequest label;

        @Column(nullable = false)
        @Enumerated(EnumType.STRING)
        private Status status;

        @ManyToOne(fetch = FetchType.LAZY)
        private User user;
    }

我可以做些什么来减少使用 spring data/hibernate 构建查询的时间。

将 sendStringParametersAsUnicode=false 添加到 jdbc url 后,响应时间从大约 2000 毫秒大幅缩短至 200 毫秒。不敢相信这一点。非常感谢这个答案。

最佳答案

尝试直接在 userService 接口(interface)中添加 JPQL 查询。这样您将使用此查询而不是 spring 将生成的查询。

@Query("SELECT r FROM Request r WHERE r.label = label AND r.user = user")
Collection<Request> findByLabelAndUserId(@Param("label") Label label, @Param("user") User user);

如果这不起作用,请在 userService 接口(interface)中再次尝试直接原生查询。

@Query("SELECT r FROM Table_Request r WHERE r.Column_label = label AND r.Column_user = user",  nativeQuery = true)
Collection<Request> findByLabelAndUserId(@Param("label") Label label, @Param("user") User user);

不过很奇怪为什么spring data的查询效率这么低。请记住,如果查询非常简单,问题可能出在您应用程序的其他地方。

祝你好运!

https://stackoverflow.com/questions/54133401/

相关文章:

github - 不存在 Jira 票证时如何阻止 GitHub 拉取请求

scikit-learn - 使用类权重的网格搜索和 KerasClassifier

php - symfony 4 正在创建发布请求

javascript - TypeORM M2O O2M关系使用级联插入时外键为空

reactjs - Chart 中的 SVG 在 Prop 更改后不会重新渲染。 react + d

django - 在批量 python 中创建资源时如何跳过现有对象实例

python - Apache Beam python Bigquery 将流式插入更改为批量插入?

django - 使用 django 和 firestore,非关系数据库

javascript - 如何在计算属性更改时更改数据?

c# - 在 C# .NET Core 的断言有效负载中使用自定义数据为第 3 方应用程序创建 SA