Nano Hash - криптовалюты, майнинг, программирование

Извлечение данных только для указанного сопоставления в запросе HQL

У меня есть следующий файл hbm.xml

    <hibernate-mapping>
      <class catalog="test_user" name="test.user" table="user">
        <id name="id" type="java.lang.Long">
          <column name="id"/>
          <generator class="identity"/>
        </id>
        <property name="name" type="string">
          <column length="200" name="name" unique="true"/>
        </property>

    <set fetch="join" inverse="true" lazy="true" name="education" table="user_education">
          <key>
            <column name="aid"/>
          </key>
          <one-to-many class="test.UserEducation"/>
        </set>
<set fetch="join" inverse="true" lazy="true" name="employment" table="user_employment">
          <key>
            <column name="aid"/>
          </key>
          <one-to-many class="test.UserEmployment"/>
        </set>
<set fetch="join" inverse="true" lazy="false" name="otherProfiles" table="user_other_profile">
          <key>
            <column name="aid"/>
          </key>
          <one-to-many class="test.OtherProfile"/>
        </set>
<set fetch="join" inverse="true" lazy="false" name="settings" table="user_setting">
          <key>
            <column name="aid"/>
          </key>
          <one-to-many class="test.Setting"/>
        </set>
<set fetch="join" inverse="true" lazy="false" name="images" table="user_images">
          <key>
            <column name="aid"/>
          </key>
          <one-to-many class="test.Images"/>
        </set>
 ..
..
...

и многие таблицы связаны с пользователем, здесь я использую fetch="join" для максимальных таблиц. В других запросах мне нужно получить данные из нескольких других связанных таблиц, поэтому я сделал fetch="join".

хочу выполнить квест

from user as u
left join fetch u.settings
where u.id=25

Моя проблема в том, что когда я хочу получить данные от пользователя, он всегда извлекает данные из всех связанных таблиц, где fetch="join". Я хочу знать, как получить только связанные данные соединения. Для приведенного выше запроса следует извлекать данные только из данных пользователя и настроек, а не из других таблиц, когда мы указали fetch="join" для нескольких таблиц.


Ответы:


1

Вы не должны использовать fetch="join", потому что выборка EAGER может привести к декартовым произведениям и это не очень эффективно.

Вам нужно установить эти ассоциации на lazy="true" и получать их только на основе запроса:

from user as u
left join fetch u.settings
where u.id=25

Таким образом, вы будете получать только пользователей вместе с их настройками и не будете присоединяться к другим ассоциациям.

21.06.2015
  • какое должно быть значение извлечения ?? 22.06.2015
  • Атрибут fetch следует удалить, если вы об этом спрашиваете. Таким образом, по умолчанию будет использоваться значение fetch="select", которое вы затем переопределяете с помощью директив выборки во время запроса. 22.06.2015
  • Итак, в случае присоединения также выберите лучший вариант? 22.06.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..