Groovy 加入的 createCriteria 问题 table
Groovy createCriteria issue with joined table
我有一个域 class Coach
与另一个域有很多关系 class CoachProperty
.
Hibernate/Grails 正在数据库中创建第三个连接 table。
在下面的示例中,我试图获取文本值都具有 foo 和 bar 的教练。我在 Grails 中尝试了 'or' 和 'and' 的不同解决方案,其中 return 是一个空列表或同时包含 foo 和 bar 的列表。
教练:
class Coach {
static hasMany = [ coachProperties : CoachProperty ]
教练属性:
class CoachProperty {
String text
boolean active = true
static constraints = {
text(unique: true, nullable: false, blank: false)
}
}
Joined table 这是自动创建的,我填充了一些数据,在这个例子中,我试图获取 coach 372,因为该 coach 有 1 和 2,即 foo 和 bar:
+---------------------------+-------------------+
| coach_coach_properties_id | coach_property_id |
+---------------------------+-------------------+
| 150 | 2 |
| 372 | 1 |
| 372 | 2 |
| 40 | 3 |
+---------------------------+-------------------+
在 Coach.createCriteria().list()
内以及其他过滤器中。这应该 return 教练 372 但 return 空:
def tempList = ["foo", "bar"]
coachProperties{
for(String temp: tempList){
and {
log.info "temp = " + temp
ilike("text",temp)
}
}
}
我好像记得这个错误。是关于不能同时使用 nullable 和空白 time.Try 和 'nullable:true'
我必须使用 executeQuery 创建一个解决方法,其中 ids 是包含我试图获取的 coachproperties 的 id 的列表。
def coaches = Coach.executeQuery '''
select coach from Coach as coach
join coach.coachProperties as props
where props.id in :ids
group by coach
having count(coach) = :count''', [ids: ids.collect { it.toLong()
}, count: ids.size().toLong()]
or{
coaches.each{
eq("id", it.id)
}
}
我有一个域 class Coach
与另一个域有很多关系 class CoachProperty
.
Hibernate/Grails 正在数据库中创建第三个连接 table。
在下面的示例中,我试图获取文本值都具有 foo 和 bar 的教练。我在 Grails 中尝试了 'or' 和 'and' 的不同解决方案,其中 return 是一个空列表或同时包含 foo 和 bar 的列表。
教练:
class Coach {
static hasMany = [ coachProperties : CoachProperty ]
教练属性:
class CoachProperty {
String text
boolean active = true
static constraints = {
text(unique: true, nullable: false, blank: false)
}
}
Joined table 这是自动创建的,我填充了一些数据,在这个例子中,我试图获取 coach 372,因为该 coach 有 1 和 2,即 foo 和 bar:
+---------------------------+-------------------+
| coach_coach_properties_id | coach_property_id |
+---------------------------+-------------------+
| 150 | 2 |
| 372 | 1 |
| 372 | 2 |
| 40 | 3 |
+---------------------------+-------------------+
在 Coach.createCriteria().list()
内以及其他过滤器中。这应该 return 教练 372 但 return 空:
def tempList = ["foo", "bar"]
coachProperties{
for(String temp: tempList){
and {
log.info "temp = " + temp
ilike("text",temp)
}
}
}
我好像记得这个错误。是关于不能同时使用 nullable 和空白 time.Try 和 'nullable:true'
我必须使用 executeQuery 创建一个解决方法,其中 ids 是包含我试图获取的 coachproperties 的 id 的列表。
def coaches = Coach.executeQuery '''
select coach from Coach as coach
join coach.coachProperties as props
where props.id in :ids
group by coach
having count(coach) = :count''', [ids: ids.collect { it.toLong()
}, count: ids.size().toLong()]
or{
coaches.each{
eq("id", it.id)
}
}