خطأ في عناصر HQL في حالة السبات
سؤال
يبدو تعيين 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، وبالتالي لا ينبغي عليك الانضمام إلى مجموعات أخرى.سيؤدي عدم الانضمام أولاً إلى منحك استعلامًا أسرع، وتجنب استخدام المميزات.حاول تجنب التميز قدر الإمكان.
لا تنتمي إلى StackOverflow