OK, 나는 Grails뿐만 아니라 최대 절전 모드를 처음 사용했다. 나는 간단한 프로토 타입을 작성하고 있으며, join을 통해 가장 간단한 many-to-many 관계를 쿼리하는 것에 매달리고있다.Grails/GORM 간단한 다 대다 조인 쿼리가 작동하지 않습니까?
내 모델 객체는 다음과 같습니다
class User {
static hasMany = [roles:Role]
String firstName
String lastName
String username
String password
// ... constraints and hooks omitted ...
}
class Role {
static hasMany = [users:User]
static belongsTo = User
String name;
// ... constraints and hooks omitted ...
}
일부 데이터를로드 한 후, 내가 볼 수
groovy:000> User.list().each { user-> println "$user.username : ${user.roles.collect {it.name}}"}
smendola : [Admin, Reviewer]
jripper : []
jbauer : []
groovy:000> Role.list().each { role-> println "$role.name: ${role.users?.collect {it.username}}"}
Admin: [smendola]
Guest: null
Reviewer: [smendola]
따라서, 사용자 smendola는 두 가지 역할이있다; 다른 사용자에게는 역할이 없습니다. 그 관계는 두 방향에서 작용하고 있습니다. 좋은.
이제 질문 : 일부 역할이있는 사용자를 쿼리하고 싶습니다. 물론 위의 두 쿼리 중 하나의 반환 값을 사용하여 Groovy에서 검색 할 수 있지만이 작업을 수행 할 DB를 원합니다.
저는 원하는 결과를 얻을 수있는 쿼리를 만들려고 노력하고 있습니다. 아무 소용이 없습니다. 나는 티에 온라인 예제를 따라 왔지만이 쿼리를 작동시키지 못한다고 생각한다.
하나 개 내가 해봤 쿼리 버전 :
groovy:000> User.where { roles.name == 'Admin' }.list()
===> []
또는이 변형 : 나는 많은 다른 많은 .ID 사용을 포함하여 변화, 또는 역할을 시도했습니다
groovy:000> User.where { roles {name == 'Admin'}}.list()
===> []
= someRoleInstance 등 아무것도 작동하지 않습니다. 나는 아이디어가 없어. 밖에 도움이 필요 하신가요?
데이터베이스는 h2입니다. Grails 버전 2.0.0
고마워! 제안 된 두 가지 변종을뿐만 아니라, 작동하지 않았다 :
추가
groovy:000> User.createCriteria().list{ roles { eq('name', 'Admin') } }
===> []
groovy:000>
groovy:000> roleName = 'Admin'
===> Admin
groovy:000> def users = User.withCriteria {
groovy:001> roles {
groovy:002> eq('name', roleName)
groovy:003> }
groovy:004> }
===> []
groovy:000>
'grails shell'과 같은 동작을하지만 예제와 t Grails 콘솔을 실행할 때 응답의 기준 예제가 모두 정상적으로 작동합니다. 그래서 나는 쉘 문제라고 생각합니다. 스윙 기반 콘솔이 훨씬 사용하기 쉽기 때문에 유지 보수가 잘되어 있지 않습니다. –
당신은 나를 놀 리고있어! 쉘이 ORM의 작동 방식에 영향을 줄 수 있다고 믿기는 어렵지만 아직까지는 그렇습니다. 버트, 답변으로 의견을 추가하십시오, 내가 받아 들일 수 있도록 (글쎄, 당신이 말한 것을 받아 들일 수 있습니다. – smendola