(Grails 2.4.2)컬렉션이 예상 결과를 생성하지 않는 도메인 클래스를 쿼리하는 Grails
사용자가 액세스 할 수있는 이야기의 목록을 얻으려고합니다. 따라서 사용자가 이야기 또는 사용자의 소유자 인 모든 이야기는이 이야기의 편집자 집단에 있습니다. createCriteria에서 HQL 작성에 이르기까지 여러 가지 다른 쿼리를 시도했습니다. 사용자가 소유하고있는 모든 이야기를 쿼리 할 수 있습니다. 사용자가 편집자 컬렉션에있는 모든 이야기를 쿼리 할 수 있지만 OR ...과 함께 쿼리를 넣을 때 올바른 결과를 얻지 못합니다.
class Story {
String title
Date dateCreated
Date lastUpdated
String description
Boolean isPublic
List storyContent = []
User owner
static belongsTo = [owner: User]
static hasMany = [storyContent : StoryContent, viewers : Viewer, editors : Editor]
...more
class Editor {
User user
static belongsTo = [story: Story]
나는 다음과 같은 쿼리를 수행 할 때 :
Result: [[com.storycreate.Story : 3, com.storycreate.Editor : 1], [com.storycreate.Story : 2, null]]
조 지금은 모든 쿼리 층 2 층 3의 소유자이다 :
def hql = "from Story as s left outer join s.editors as se where s.owner.username = 'joe'"
def results = Story.executeQuery(hql)
을 나는 정확한 결과를 얻을 수 조이 편집자 인 이야기
def hql = "from Story as s left outer join s.editors as se where se.user.username='joe'"
def results = Story.executeQuery(hql)
얻을 올바른 결과 : 나는 조 소유자 또는 편집자 중 하나입니다이 이야기의 목록을 결합하면 지금
Result: [[com.storycreate.Story : 3, com.storycreate.Editor : 1], [com.storycreate.Story : 4, com.storycreate.Editor : 4]]
(조 편집기와 소유자 이야기 (3)과 story4의 편집자 둘 다)
def hql = "from Story as s left outer join s.editors as se where (s.owner.username='joe' OR se.user.username='joe')"
def results = Story.executeQuery(hql)
내가 잘못된 결과가 결국
Result: [[com.storycreate.Story : 3, com.storycreate.Editor : 1], [com.storycreate.Story : 4, com.storycreate.Editor : 4]]
(조 소유자 인 스토리 2 누락) 얻을, 나는 쿼리가 나에게 isPublic 사실 또는 로그인 한 사용자가 모든 이야기의 목록을 제공 할 헛소리 야. 네이더, 편집자, 또는 시청자. 하지만 나는 Hibernate가 여기서 어떻게 작동하는지 이해하지 못하는 것 같다.
, 나는이 결과를 생각'결과 : [[com.storycreate.Story : 3, COM .storycreate.Editor : 1], [com.storycreate.Story : 2, null]]'보이지 않습니다. –
아마도 결과를 이해할 수 없습니다. 나는 Grails와 조금은 초보자이다. 나에게 결과는 2 개의 행을 보여준다. 첫 번째는 ID 3의 Story 객체를 표시하고 두 번째는 Story 객체 ID 2를 표시합니다. 맞지 않습니까? – jer0dh