use*_*749 5 java hibernate hibernate-annotations
假设我有一组产品,每个产品都有一组评论.每个评论都有一个分数.我需要更多的平均分数,然后我需要实际的评论.是否有任何最佳实践/清洁方式预先计算平均值并将其与休眠一起存储.
我目前正在考虑将评论计数和审核总和列添加到产品表中,并操纵添加审核方法以更新计数和总和.
我很高兴听到一种更清洁的方式.
我建议不要在父表上保留总和列。如果两个竞争请求尝试更新总和列,则其中一个请求将会失败,或者您将面临因过时读取而破坏总和的风险(除非系统流量不高……)。
您需要的查询非常简单,任何像样的数据库都应该在一段时间内提供良好的性能(惰性伪 SQL/HQL):
1) 产品的特定平均评论分数:
select sum(score)/count from reviews where product_id = ?
Run Code Online (Sandbox Code Playgroud)
2) 产品列表及其平均评论分数
select product_name, sum(r.score)/count(r.score)
from products p
join reviews r
group by product_name
Run Code Online (Sandbox Code Playgroud)
对于第一个查询,请确保您在reviews 表的product_id 上有某种索引。
使用 hibernate,您可以通过 HQL 或Criteria 对象使用投影查询。如果这还不够快,那么我会研究二级缓存和查询缓存。
打开show_sqlTestTestTest 以确保 hibernate 仅访问数据库一次,并且当添加/更新新项目时,您的缓存将失效。
| 归档时间: |
|
| 查看次数: |
1531 次 |
| 最近记录: |