2011-04-07 4 views
1

확인, 양방향 @ManyToMany 관계가있는 두 개의 테이블로 매핑되었습니다.최대 절전 모드 : 다 대다 관계가 아닌 행만 찾습니다.

이제 many-to-many 관계가 아닌 요소 만 반환하고 here의 코드를 사용하려고 시도하지만 런타임에 예외가 발생합니다.

String hql = "select a from Article a " + 
       "left join a.tags t " + 
       "group by a " + 
       "having count(t)=0"; 

그 요소를 반환 할 수있는 더 나은 방법이 있나요 : 다음은 HQL입니까? 또는이 쿼리의 오류를 수정하려면?

지금 던진다는 예외입니다 :

column "article0_.id" must appear in the GROUP BY clause or be used in an aggregate function 

org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query; SQL ... 
+0

당신이 DB에 접근 할 때 Hibernate가 생성하는 SQL을 제공 할 수

또는 다음 쿼리를 사용할 수 있습니까? 그것은 매핑에 대한 모든 필드를 얻으려고하지만, 그 중 하나만 '그룹 기준'조건에 포함됩니다. – Donz

+0

@Donz, 나는 그것을 추출하려고 노력하고, 그 동안 제안을 시도한다. –

답변

2

쿼리는 정확하지만 일부 데이터베이스 group by a에 충분하지 않다면, group by a.id, a.title과 같이 a의 모든 속성을 enumarate시켜야합니다. 또한

select a from Article a where a.tags is empty 

참조 :

+0

그것은 작동합니다! 하지만 지금은 내 그룹에 10 개 이상의 속성이 있습니다. 또한 모델에서 뭔가를 변경하면 쿼리에서 명시 적으로 변경해야합니다. . * 같은 것을 할 수 있습니까? 모든 속성을 선택하려면? –

+0

@moondowner :'join' - 아니요,하지만 당신의 작업은'join'없이 해결할 수 있습니다, update를보십시오. – axtavt

1

확실하지 작동,하지만 당신은 그것을 시도를 제공 할 수있는 경우 :

String hql = "select a from Article a " + 
       "where a.tags=null "; 
+0

나는 그것을 지금 시도 할 것이다. –

+0

작동하지 않습니다. 오류 :'ERROR : 또는 근처에서 구문 오류가 발생합니다. '' –

+0

흠! 디버깅의 한 가지 방법은 다음과 같습니다. Hibernate에서 생성 된 SQL을 가져 와서 독립형 데이터베이스 클라이언트를 통해 데이터베이스에 직접 쿼리를 실행하십시오. 어떤 오류가 있는지보십시오. SQL 쿼리를 수정하십시오. 문제가 해결되면 HQL 문제를 파악할 수있는 가능성이 높아집니다. – craftsman

관련 문제