问题描述
由于性能问题,我必须重构以下代码,以避免在生成的查询中使用原始数字:
override fun getMessages(chatId: Long,count: Int): List<Smth> {
val pageRequest = PageRequest(0,count,sortedByEventTime())
return messageRepository
.findAll(MessageSpecifications.chatIds(fetchChatIds(chatId)),pageRequest)
.content
}
其中chatIds()如下:
fun chatIds(ids: List<Long>): (Root<Smth>,CriteriaQuery<*>,CriteriaBuilder) -> Predicate {
return { root,_,cb ->
cb.or(*ids.map { id ->
cb.equal(root.get<Long>("chatId"),id)
}.toTypedArray<Predicate?>())
}
}
在调试日志中的Spring Boot应用程序中,我看到在生成的SQL中插入了原始值。但是由于DBMS性能问题,我需要避免在SQL查询中使用原始值。我需要修改代码以使用绑定变量,以避免在DB中重复执行计划。我怎样才能做到这一点?任何样品,参考文献,代码片段将不胜感激。附言在这种情况下,不能选择升级到最新的Hibernate版本(
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)