문제

내 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

그러나 여기에서는 히버지에서만 선택하므로 다른 컬렉션에 참여해서는 안됩니다. 가입하지 않으면 먼저 더 빠른 쿼리가 제공되며 뚜렷한 사용을 피할 수 있습니다. 가능한 한 뚜렷한 것을 피하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top