У меня есть следующая структура сущностей: Бизнес → Кампания → Продвижение, где у ОДНОГО бизнеса может быть много кампаний, а одна кампания может иметь много рекламных акций. Оба отношения "один ко многим" объявляются ЛАЗИ. Одно место в моем коде, мне нужно с нетерпением получить обе коллекции из бизнеса, поэтому я:
Query query = entityManager.createQuery("select b from Business b " +
"left join fetch b.campaigns c " +
"left join fetch c.promotions where b.id=:id");
query.setParameter("id", b.getId());
business = (Business) query.getResultList().get(0);
Однако запрос возвращает список результатов, содержащий в нем 4 бизнес-объекта, все 4 объекта ссылаются на один и тот же экземпляр Business. В моей базе данных в этом бизнесе есть 3 кампании, и во всех трех кампаниях есть 3 рекламных акции.
У меня есть два вопроса:
-
Во-первых, я использую List to содержит много сторон отношений, но когда программа запускается, я получаю исключение "org.hibernate.HibernateException: не может одновременно получить несколько мешков". Затем я искал это исключение, и похоже, что я должен использовать Set вместо List. Поэтому я сменил коллекцию на Set, и она сработала. Может ли кто-нибудь сказать мне, почему List не будет работать в этой ситуации?
-
Я ожидаю, что запрос вернет один результат, потому что он запрашивает id, являющийся первичным ключом, и поэтому должен возвращать только один результат. Но оказывается, что он возвращает 4 экземпляра в списке. Это проблема? Или это ожидаемое поведение?
Любая помощь будет принята с благодарностью.