2010-05-03 4 views
3

나는 (Groovy/Grails에서) 누군가가 나를 도울 수 있기를 바라는 HQL 질문을 가지고있다.Hibernate HQL과 Grails- 컬렉션을 어떻게 비교합니까?

1 대 1 태그 모음이있는 간단한 Asset 개체가 있습니다.

사용자는 params.tags 일부 태그에 전달

: 나는 HQL에서 할 노력하고있어 무엇

class Asset { Set tags static hasMany = [tags:Tag] }

class Tag { String name }

(예 : 그루비 Grails의 바위) 및 자산을 (반환하고 싶어들) 그 태그를 가지고 그 정확한 태그.

SELECT DISTINCT a FROM Asset a LEFT JOIN a.tags t WHERE t.name IN (:tags)

assetList = Asset.executeQuery(hql, [tags:tokenizedTagListFromParams]

위의 코드는 완벽하게 작동하지만 정말 OR 같은 :

다음은 태그가 하나 이상 존재하는 경우 자산 태그에 자산을 반환 내 HQL입니다 . 태그가 발견되면 해당 자산을 반환합니다.

정확히 동일한 태그가있는 자산 만 반환하려고합니다.

새 태그가 생성 될 때마다 I new Tag(name:xxx).save() 태그 요청과 각 태그에 대해 고유 한 ID 인스턴스를 얻을 수 있습니다.

또한 전달 된 태그를 각 태그에 대해 Tag.findByName(t1)의 Tag 인스턴스 목록으로 변환하고 위의 HQL에 (고유 한) 태그 ID 목록을 추가로 변환 해 보았습니다.

나는 도움이나 조언을 부탁드립니다.

+0

재미있는 것은 원래 오류가 실제로 내가 만들고 싶었던 행동 이었기 때문에 실제로 문제를 해결했습니다. – nhouser9

답변

1

이 작업을하기에는 너무 많은 두뇌 노력이 필요합니다. 검색 가능한 플러그인을 대신 사용해 보셨습니까? Tag를 Asset의 "구성 요소"로 설정 한 다음 "+ tag : groovy + tag : grails + tag : rocks"와 같은 검색을 수행 할 수 있습니다. 그러면 결과가 나옵니다 (그리고 아마도 더 빠를 것입니다).

+0

안녕하세요 피터! 이것은 훌륭한 제안입니다. 내 프로젝트에서 검색 가능한 플러그인을 사용하고 있습니다. '태그'는 자산 클래스에서 정의 된 검색 가능한 '구성 요소'입니다. 나는 검색 상자가있는 페이지가 있으며, 그 태그를 검색하기 만했다. groovy grails rocks와 Asset hit을 얻는다. 우수한. 그러나 내가 언급 한 구문을 시도했을 때 나는 어떤 히트도 전혀 얻지 못했습니다! 내가 필요하거나 구성하는 특별한 인용문이 있습니까? 쿼리 구문 분석기 구문을 검사했습니다. 작동해야합니다. 왜 나는 전혀 결과가 없는지 궁금합니다. 우수 제안 해 주셔서 감사합니다. Burt Prior – BurtP

+0

검색 가능한 클래스에'tag' 속성이있는 경우'tag : ... '구문이 작동합니다. 아마'tags : ... '접두어가 작동할까요? 'tag'와 같은 필드 이름에 대해 태그 이름을 색인 할 수 있다는 것을 알고 있지만 검색 가능으로 구성하는 방법을 기억하지 못합니다.시도해 볼 수 있습니다 : 정적 검색 가능 = { 태그 [이름 : "태그"] } 의 '자산' –

관련 문제