У меня три класса
Тема {@ManytoOne Catgoery category
@ManyToMany Вопросы}
Поэтому, если мне нужно найти все вопросы, относящиеся к категории. Мне нужно сначала найти 1. Все темы категории 2. Затем найдите все вопросы, относящиеся к этому списку категорий на шаге 1
Может ли кто-нибудь сказать мне, как написать этот запрос?
Я пробовал много вещей, но не мог понять.
List<Topic> topicList = getSession()
.createCriteria(Topic.class)
.add(Restrictions.eq("category", new Category(id)))
.list();
System.out.println(">>>>>>>>>>>>>>>>>size="+topicList.size());
return getSession().createCriteria(Question.class)
.createAlias("topics", "topic")
.add(Restrictions.in("topic", topicList))
.list();
Я получаю следующий вывод
>>>>>>>>>>>>>>>>>size=8
org.hibernate.QueryException: could not resolve property: topic of: com.ekiras.domain.Question
at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:83)
at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:77)
at org.hibernate.persister.entity.AbstractEntityPersister.getSubclassPropertyTableNumber(AbstractEntityPersister.java:1985)
at org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:61)
at org.hibernate.persister.entity.AbstractEntityPersister.toColumns(AbstractEntityPersister.java:1960)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumns(CriteriaQueryTranslator.java:523)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.findColumns(CriteriaQueryTranslator.java:538)
at org.hibernate.criterion.InExpression.toSqlString(InExpression.java:51)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getWhereCondition(CriteriaQueryTranslator.java:419)
at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:123)
at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:92)
at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:95)
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1643)
at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:374)
at com.ekiras.dao.QuestionDAO.findByCategoryId(QuestionDAO.java:35)
at com.ekiras.service.QuestionService.findByCategory(QuestionService.java:22)
at com.ekiras.controller.QuestionController.listCategoryQuestions(QuestionController.java:29)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
Я мог ошибаться, но я думаю, что сообщение Hibernate довольно ясно, что ваш класс вопросов не имеет "темы" в качестве зарегистрированного участника. Можете ли вы перекрестно проверить имя и правописание в своем классе вопросов? Я говорю это, потому что я не нахожу ничего другого здесь, если мы не увидим сущности классов, и я столкнулся с такой проблемой, и это был случай со мной.