gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 07:26:58 25 4
gpt4 key购买 nike

每当我查询一个让 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的查询效率这么低。请记住,如果查询非常简单,问题可能出在您应用程序的其他地方。

祝你好运!

关于java - Hibernate需要很长时间才能得到查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54133401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com