2015-08-03 4 views
1

у меня есть два вопроса, касающихся использования HQLHQL возвращает повторяющиеся объекты

  1. У меня есть запрос, как показано ниже, но он возвращает повторяющиеся строки/объекты, добавляя DISTINCT ключевого слова решает эту проблему, но может кто-нибудь объяснить, почему нам нужно Здесь мы не можем обойтись без этого?

    select st from State st inner join fetch st.cities 
    
  2. документация HQL говорит, что

    выборки присоединиться обычно не требуется присвоить псевдоним, поскольку связанные объекты не должны использоваться в предложении WHERE (или любой другой статье).

    но почему мы не можем использовать связанные объекты в предложении where, если мы хотим с готовностью извлечь, а также хотим добавить какое-то условие, то как это сделать?

ответ

2
  1. Просто потому, что, как указаны HQL и JPQL: один элемент возвращается в строке JDBC ResultSet, если вы не используете различны.

  2. Потому что, если вам было разрешено добавлять ограничения на получаемые объекты, вы нарушили бы сами инварианты ваших сущностей, что Hibernate и ваш собственный код предположительно всегда проверяются: города, возвращаемые state.getCities(), являются городами государства. Все они. Не только те, которые слушают некоторые критерии случайного запроса.