Как получить список записей в Hibernate с помощью Criteria Query

1

У меня три класса

  1. Категория {}
  2. Тема {@ManytoOne Catgoery category

    @ManyToMany Вопросы}

  3. Вопрос {@ManytoMany Topic}

Поэтому, если мне нужно найти все вопросы, относящиеся к категории. Мне нужно сначала найти 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

1 ответ

1

Я мог ошибаться, но я думаю, что сообщение Hibernate довольно ясно, что ваш класс вопросов не имеет "темы" в качестве зарегистрированного участника. Можете ли вы перекрестно проверить имя и правописание в своем классе вопросов? Я говорю это, потому что я не нахожу ничего другого здесь, если мы не увидим сущности классов, и я столкнулся с такой проблемой, и это был случай со мной.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню