我的最新发明是一个系统,您可以在世界各地的餐馆实时跟踪华夫饼。
为实现这一目标,我的Waffle
有Condiments
个present
,Waffle
中任何Waffle
都可能是table number
。 Restaurant
目前有Name
个language
,属于Waffle
,Waffle.shape == 'square'
个Restaurant
被翻译成不同的Name
。
从技术上讲,我需要将每个Waffle.Restaurant.Names.language == 'en'
放在Condiment.present
的位置,然后在class Condiment {
int condimentId
boolean present
Waffle waffle
static belongsTo = [Waffle]
}
class Waffle {
int waffleId
int tableNumber
String shape
Restaurant restaurant
static belongsTo = [Restaurant]
static hasMany = [condiments:Condiment]
}
class Restaurant {
int restaurantId
static hasMany = [waffles:Waffle, names:Name]
}
class Name {
String name
String language
static hasMany = [restaurants:Restaurant]
}
Waffle
{{1}}的位置进行排序,并显示{{1}是真的。
Restaurant.Names = ['language':'en', 'name':'Waffle House'], ['language':'fr', 'name':'Le Waffle House'], ['language':'de', 'name':'Das Waffle House']
Filtered by square shaped ============================ (Ascending order) V Restaurant Table# Syrup Butter Mayo --------------------------------------------------------- Denny's 42 Y Y N Denny's 27 N N N Denny's 11 Y Y N IHOP 10 Y N N IHOP 7 N N N Waffle House 10 Y Y Y
以下是类的简化版本:
{{1}}
如果可能的话,我想在GORM中这样做,但HQL也是可以接受的。这是Grails 2.3。请记住,这是分页的,因为世界上有数百万{{1}}个,如果不是更多的话!
答案 0 :(得分:1)
基于标准:
def waffles = Waffle.createCriteria().list(offset: 0, max: 100){
eq('shape', 'square')
restaurant{
names{
eq('language', 'en')
order('name', 'asc')
}
}
condiments{
eq('present', true)
}
}
基于HQL:
def query = """
select w from Waffles as w \
inner join w.restaurant as r \
inner join w.condiments as c \
inner join r.names as n \
where w.shape = :shape \
and n.language = :lang \
and c.present is true
"""
def waffles = Waffle.executeQuery(query,[shape: 'square', lang: 'en',
max: 100, offset: 0])
首先会得到100个华夫饼。
基于HQL的方法将是有效的,因为餐厅,名称和调味品将不会被急切地提取,这将是如上所述使用Criteria的情况。
将lang
更改为法语的“fr”。