سؤال

يبدو تعيين 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

ولكن هنا يمكنك فقط اختيار hibuser، وبالتالي لا ينبغي عليك الانضمام إلى مجموعات أخرى.سيؤدي عدم الانضمام أولاً إلى منحك استعلامًا أسرع، وتجنب استخدام المميزات.حاول تجنب التميز قدر الإمكان.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top