Как остановиться, в спящем режиме от нетерпеливой выборки many-one связанный объект

Возможно, вам потребуется указать таблицу EXCLUDED в вашем операторе set.

SET channels = array_append(EXCLUDED.channels, 'a159d680-2f2e-4ba7-9498-484271ad0834')

При использовании предложения ON CONFLICT DO UPDATE значения, которые не вставлены из-за конфликта, сохраняются в таблице EXCLUDED. Это эфемерная таблица, которую вы фактически не должны составлять, способ NEW и OLD в триггерах.

Из Руководства PostgreSQL :

конфликта_акция определяет альтернативное действие ON CONFLICT. Это может быть либо DO NOTHING, либо предложение DO UPDATE, определяющее точные детали действия UPDATE, которое должно быть выполнено в случае конфликта. Предложения SET и WHERE в ON CONFLICT DO UPDATE имеют доступ к существующей строке, используя имя таблицы (или псевдоним), и к строкам, предложенным для вставки, используя специальную исключенную таблицу. Привилегия SELECT требуется для любого столбца в целевой таблице, где читаются соответствующие исключенные столбцы.

Обратите внимание, что эффекты всех триггеров BEFORE INSERT для каждой строки отражаются в исключенных значениях, поскольку эти эффекты могли способствовать исключению строки из вставки.

BLOCKQUOTE>

10
задан 2 revs 21 October 2008 в 20:21
поделиться

5 ответов

Если другой конец ассоциации может быть пустым, я верю, в спящем режиме, должен запросить для конца ассоциации, чтобы определить, должно ли это использовать прокси или не (никакая потребность в прокси, если другой конец является пустым). Я не могу найти ссылку на это прямо сейчас, но я не забываю читать ее где-нибудь.

Для обеспечения ленивой загрузки полей, документация относится к улучшениям байт-кода на полях в buildtime: Используя ленивую выборку свойства. Вот выборка:

Hibernate3 поддерживает ленивую выборку отдельных свойств. Этот метод оптимизации также известен как группы выборки. Обратите внимание на то, что это - главным образом маркетинговая функция, поскольку на практике, оптимизация чтений строки намного более важна, чем оптимизация чтений столбца. Однако только загрузка некоторых свойств класса могла бы быть полезной в крайних случаях, когда таблицы прежней версии имеют сотни столбцов, и модель данных не может быть улучшена.

Ленивая загрузка свойства требует buildtime инструментария байт-кода! Если Ваши персистентные классы не будут улучшены, Будут в спящем режиме, то тихо проигнорирует ленивые настройки свойства и отступит к непосредственной выборке.

9
ответ дан 3 December 2019 в 23:52
поделиться

При передаче быть в спящем режиме объекта от модели до представления через контроллер не делайте!

Вместо этого сделайте "объект снимка" для хранения значений от Быть в спящем режиме объекта, который Вы хотите передать представлению и быть отображенными.

Почему? Прокси может все еще получить значения, когда это находится в контроллере..., но когда Вы передаете прокси/объект представлению, это больше не может получать значения, потому что транзакция уже закончилась. И это - то, почему я предложил то, что я имею выше.

0
ответ дан 3 December 2019 в 23:52
поделиться

Когда использование В спящем режиме аннотации, помещая @ManyToOne (выборка = FetchType. ЛЕНИВЫЙ) на ассоциации, выполняет то, что Вы хотите. Вы попытались установить выборку = "ленивый", чтобы видеть, работает ли это?

0
ответ дан 3 December 2019 в 23:52
поделиться

@Miguel Ping: Я думаю, что страница, на которую вы ссылаетесь, это [ http://www.hibernate.org/162.html] . Насколько я понимаю, дополнительный SELECT необходим в случае взаимно-однозначной стороны, где внешний ключ отсутствует. Установка constrained = "true" сообщает Hibernate, что другая сторона всегда присутствует и никакого дополнительного SELECT не требуется.

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

Пока что по теории. У меня прокси работает на стороне внешнего ключа / многие-к-одному. Используемое сопоставление для ассоциации:

<столбцы многих имен = "haendler" column = "VERK_HAENDLOID" lazy = "proxy" />

Но прокси-сервер не работает для меня в одноразовых одна сторона использует сопоставление, подобное описанному по данному URL ( constrained = "true" ). Хм, думаю, я открою вопрос для этого. ; -)

0
ответ дан 3 December 2019 в 23:52
поделиться

Я обнаружил, что lazy = no-proxy , но в документации говорится о каком-то модификация байт-кода и не идет в любые подробности. Кто-нибудь может мне помочь out?

Я предполагаю, что вы используете ANT для сборки своего проекта.

<property name="src" value="/your/src/directory"/><!-- path of the source files -->
<property name="libs" value="/your/libs/directory"/><!-- path of your libraries -->
<property name="destination" value="/your/build/directory"/><!-- path of your build directory -->

<fileset id="applibs" dir="${libs}">
  <include name="hibernate3.jar" />
  <!-- include any other libraries you'll need here -->
</fileset>

<target name="compile">
  <javac srcdir="${src}" destdir="${destination}" debug="yes">
    <classpath>
      <fileset refid="applibs"/>
    </classpath>
  </javac>
</target>

<target name="instrument" depends="compile">
  <taskdef name="instrument" classname="org.hibernate.tool.instrument.javassist.InstrumentTask">
    <classpath>
      <fileset refid="applibs"/>
    </classpath>
  </taskdef>

  <instrument verbose="true">
    <fileset dir="${destination}">
      <!-- substitute the package where you keep your domain objs -->
      <include name="/com/mycompany/domainobjects/*.class"/>
    </fileset>
  </instrument>
</target>
2
ответ дан 3 December 2019 в 23:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: