Мертвая блокировка Oracle, когда В спящем режиме приложение, загружающее данные для использования только для чтения

Поскольку sportsValues является массивом объектов, вы можете вставить в него новый объект. Проверьте код ниже.

const sportsValues = [];
sportsValues.push({ 
  playerName:'3',
  playerHeight: 1,
});

console.log(sportsValues);

5
задан jonathanq 19 March 2009 в 18:36
поделиться

4 ответа

Мы наконец определили, что решение заключалось в том, чтобы обернуть его в транзакцию readOnly.

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

Использование транзакции readOnly привело к исчезновению проблемы!

<bean id="txWrappedOrderDataService"
  class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="transactionManager"/>
<property name="target" ref="orderDataService"/>
<property name="transactionAttributes">
    <props>
        <!-- all methods require a transaction -->
        <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
    </props>
</property>

1
ответ дан 15 December 2019 в 06:35
поделиться

Ненамеренные обновления могли бы произойти с, в спящем режиме, когда Вы используете методы set, которые управляют значением, которое они на самом деле устанавливают. Примером был бы метод set для Строкового атрибута, который заменяет значение пустого указателя с "". Вероятный кандидат является также наборами. Удостоверьтесь, что методы set не заменяют содержавший набор. Если Вы замените набор объекта с другим набором, содержащим то же содержание, будете в спящем режиме, то не сможет понять, что и обновляют полный набор.

2
ответ дан 15 December 2019 в 06:35
поделиться

Вы проверили на какие-либо триггеры в базе данных? Вы уверены, что это, в спящем режиме и не некоторый другой процесс, обновляющий те те же строки? Возможно, существует столбец, хранящий метку времени последнего чтения, и это обновляется каждый раз, когда строка читается (Хотя я не могу помнить первое, что пришло на ум, что Вы могли сделать ИЗБРАННЫЕ триггеры)...

0
ответ дан 15 December 2019 в 06:35
поделиться

Дженс прав

Чтобы добавить, вам нужно внимательно осмотреть ваши сеттеры и геттеры и посмотреть, возвращаются ли они. другое значение на разных звонках например, new Date () - это будет возвращать новое значение - каждый раз, когда оно вызывается, и заставит hibernate думать, что объект изменился

0
ответ дан 15 December 2019 в 06:35
поделиться
Другие вопросы по тегам:

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