假設我有以下HBM映射:HQL查詢上設置屬性
<class name="Student" table="student">
<set name="classes" table="student_classes" cascade="none">
<key column="studentId" />
<many-to-many column="classId" class="org.myCompany.myClass" />
</set>
</class>
在我的學生POJO,我有以下幾點:
private Set<myClass> classes = new HashSet<myClass>();
public Set<myClass> getClasses() { return classes; }
public void setClasses(Set<myClass> classes) { this.classes = classes; }
我想運行下面的HQL查詢:
select count(*) from Student where classes.className = :myClassName
然而,休眠拋出以下異常:
ERROR [service-j2ee-4] PARSER.reportError(33) | Invalid path: 'classes.className'
ERROR [service-j2ee-4] PARSER.reportError(33) | <AST>:0:0: unexpected end of subtree
ERROR [service-j2ee-4] PARSER.reportError(33) | left-hand operand of a binary operator was null
org.hibernate.hql.ast.QuerySyntaxException: Invalid path: 'classes.className' [select count(*) from Student where classes.className = :myClassName and 1=1]
是否有可能運行一個hibernate查詢返回基於Set的屬性的結果?在上面的例子中,我們可能想要查詢所有正在參加「代數I」或其他課程的學生嗎?
編輯:我啓用了相應的調試模式來獲得Hibernate的輸出它的實際的SQL查詢,這裏是它生成的查詢:
select count(*) as col_0_0_
from student student0_, student_classes student1_, classes student2_
where student0_.studentId=student1_.studentId and student1_.classId=student2_.classId and student2_.className LIKE 'algebra' and 1=1;
東西其實HQL不具有良好的內部連接支持(見http://www.coderanch.com/t/218169/ORM/java/Inner-Join-HQL)。我的集合包含myClass類型的對象,它具有className的屬性。我想根據那個className屬性進行查詢(而不是集合本身的屬性)。 – David 2011-05-03 14:13:12
是的,它有很好的支持。您是否閱讀過您發送的帖子的答案。您不必像在SQL中那樣指定連接的on子句,因爲映射已經定義了表如何鏈接在一起。你有沒有試過我的查詢?閱讀http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#queryhql-joins – 2011-05-03 14:24:27
我剛剛試過你的查詢,並得到了錯誤:「加入路徑預期!無效的路徑:clazz .className「 – David 2011-05-03 14:36:01