【发布时间】:2019-01-10 16:50:47
【问题描述】:
每当我查询一个让 Spring Data/Hibernate 在我的代码上构建查询“findByLabelAndUserId”的表时,它似乎总是需要很长时间。
我在 sql server 上测试查询,它立即返回结果。
在我的项目上测试查询时,提取 10 行需要 4 秒以上。
以下是我认为要做的事情: 使用@Query,但这将花费太长时间来更改许多方法。 我添加了一个全参数构造函数,但没有任何改变。 我将 fetch 方法从渴望更改为惰性,但没有任何改变
我尝试在 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 构建查询的时间。
向 jdbc url 添加 sendStringParametersAsUnicode=false 将响应时间从大约 2000 毫秒大幅提高到 200 毫秒。不能相信这一点。非常感谢这个答案。
【问题讨论】:
标签: java hibernate spring-data-jpa