Предположим, у меня есть следующее отображение HBM:
<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
Однако, hibernate выдает следующее исключение:
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]
Можно ли запустить запрос гибернации, который возвращает результаты, основанные на свойствах набора? В приведенном выше примере мы могли бы запросить всех студентов, которые изучают «Алгебру 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;