문제
내 hibernateuserimpl 매핑은 아래처럼 보입니다
<set name="groups" table="OS_USER_GROUP" inverse="false" cascade="none" lazy="false">
<key column="user_id"/>
<many-to-many column="group_id" class="com.opensymphony.user.provider.hibernate3.ahxu.impl.HibernateGroupImpl"/>
</set>
나는 HQL 쿼리를 좋아한다
select distinct hibuser from HibernateUserImpl hibuser, hibuser.groups.elements hibgroup where hibuser.name = ? and hibgroup.name = ?
Hibuser.groups에 오류가 발생합니다.집단 . 내가 놓친 것이 있습니까?
콘솔의 오류
org.hibernate.hql.ast.QuerySyntaxException: hibuser.groups.elements is not mappe
d [select distinct hibuser from com.opensymphony.user.provider.hibernate3.ahxu.i
mpl.HibernateUserImpl hibuser, hibuser.groups.elements hibgroup where hibuser.n
ame = ? and hibgroup.name = ?]
해결책
나는 당신이 명시 적으로 만들어야한다고 생각합니다 가입하다.
select distinct hibuser
from HibernateUserImpl hibuser
join hibuser.groups hibgroup
where hibuser.name = ? and hibgroup.name = ?
다른 팁
HIBUSER.GROUPS 컬렉션이므로 컬렉션의 요소의 속성에 액세스 할 수 없습니다.
이것은 다음과 같이 설명 할 수 있습니다.
목록 그룹 = ...; 그룹. 요소 <- 불법 기능 액세스.
따라서 액세스 할 수 있습니다 hibuser.groups.elements, 여러 가지 조인을 수행해야합니다.
select element
from HibernateUserImpl hibuser
join hibuser.groups group
join group.elements element
where hibuser.name = ? and hibgroup.name = ? and element.whatever = something
그러나 여기에서는 히버지에서만 선택하므로 다른 컬렉션에 참여해서는 안됩니다. 가입하지 않으면 먼저 더 빠른 쿼리가 제공되며 뚜렷한 사용을 피할 수 있습니다. 가능한 한 뚜렷한 것을 피하십시오.
제휴하지 않습니다 StackOverflow