我們有ShopArticles店,想加入評分系統。Criteria API hasmany的平均關係
我們ShopArticle看起來是這樣的:
class ShopArticle {
String contUnit = 'STK', orderUnit = 'PCK'
Double value, tax = 0.19
String name, description, keyword
String group1, group2, group3, articleNumber
String producer
Boolean unlocked
static hasMany = [ratings: ShopArticleRating]
}
而且評級是這樣的:
class ShopArticleRating {
String comment
int rating
ShopArticle shopArticle
User user
static belongsTo = ShopArticle
}
現在,我們要篩選的atricle的平均評分,所以我們做了這樣的:
def shopArticleList = ShopArticleRating.createCriteria().listDistinct {
projections {
groupProperty("shopArticle")
}
}
def ids = []
shopArticleList.each { shopArticle ->
def sum = 0
shopArticle.ratings.each {
sum += it.rating
}
if ((sum/shopArticle.ratings.size()) >= filter.rating) {
ids.add(shopArticle.id)
}
}
List<ShopArticle> list = ShopArticle.createCriteria().list {
if (ids.size() > 0) {
'in'("id", ids)
}
}
有沒有更好的方法來篩選平均評分?
也許是這樣的:
List<ShopArticle> list = ShopArticle.createCriteria().list {
createAlias('ratings','r')
projections {
groupProperty('r.rating')
}
gt("r.rating",filter.rating)
}
你需要每家商店或所有商店的平均評分? – injecteer