源代码: https://github.com/HybridProgrammer/GormIn
Grails版本: 3.2.8
我正在尝试运行以下查询:
def query = UserData.where {
teams { id in teamIds }
}
在Spock测试中运行查询时,它可以正常工作。从Grails服务运行它时,它返回UserData中的所有行,并且不会仅筛选出teamIds列表中属于该团队的那些用户。
void "never fails - direct approach"() {
given:
setupData()
def me = User.first()
def teamIds = me.getAuthorities().id
when:
def query = UserData.where {
teams { id in teamIds }
}
then:
teamIds.size() == 1
query.size() == 2
}
生成SQL
select count(*) as y0_
from user_data this_ inner join workflow_role_teams teams3_
on this_.id=teams3_.user_data_teams_id inner join role teams_alia1_
on teams3_.role_id=teams_alia1_.id
where teams_alia1_.id in (?)
limit ?
void "sometimes fails"() {
given:
setupData()
def me = User.first()
when:
def query = exampleService.getMyOrMyTeamsData(me)
then:
me.getAuthorities().size() == 1
query.size() == 2
}
exampleService.getMyOrMyTeamsData
def getMyOrMyTeamsData(User me) {
def teamIds = me.getAuthorities().id
def query = UserData.where {
teams { id in teamIds }
}
return query
}
生成SQL
select count(*) as y0_
from user_data this_ inner join workflow_role_teams teams3_
on this_.id=teams3_.user_data_teams_id inner join role teams_alia1_
on teams3_.role_id=teams_alia1_.id
limit ?
请参阅解决方案分支 https://github.com/HybridProgrammer/GormIn/commit/d510e63b3e85b82ce06e24d8a392c10873a8306c
答案 0 :(得分:0)
问题在这里得到解答:
Seemingly Random 1=1 where clause generated by GORM's where closure
在grails-app / domain / oneisone / UserData.groovy
中List teams = new ArrayList()
更改为
List<Role> teams = new ArrayList()
运行grails clean然后重新运行测试。