Переполнение Hibernate Optimistic Locking Version - PullRequest
2 голосов
/ 21 августа 2011

Я использую hibernate, и для целей блокировки hibernate предусмотрен столбец версии.Проблема в том, что приложение будет обновлять запись достаточно часто, чтобы предел int в Java достигался столбцом версии.Возможно, что также достигнут предел int MySQL.

Есть ли способ сделать версию откатной до нуля, как только она достигнет какого-либо предела (Java или MySQL)?

Конечно, я могу просто увеличить тип данных, чтобы быть длинным.Но это просто задерживает неизбежное.

Редактировать: Я погуглил и нашел эту аннотацию: @OptimisticLock (исключено = true).Ссылка: http://bit.ly/nczCx1 Кажется, что теоретически это может работать, но я не использовал его успешно.Кто-нибудь знает, как правильно использовать эту аннотацию?

Ответы [ 2 ]

3 голосов
/ 21 августа 2011

Хорошо, значит, вы достигли предела целого числа, достаточно справедливо.Когда вы увеличите его до, скажем «long», у вас есть еще четыре байта для вас.Этого более чем достаточно (это, конечно, просто задерживает неизбежное).

Вы можете достичь старого предела (из 2 ** 32 обновлений) ровно 2 ** 32 раза, прежде чем он снова начнет переполняться.Предположим, что для такого количества обновлений требуется 1 секунда (я полагаю, это заняло у вас больше времени), а затем потребуется еще 2 ** 32 секунды, чтобы (или около 136 лет) переполниться.

Но я не знаю, есть ли другое элегантное решение, но если бы его не было, я бы не стал тратить время на такие детали.

1 голос
/ 23 августа 2011

@ OptimisticLock (исключено = верно) работает!Я просто забыл убедиться, что ставлю его на каждое обновленное свойство.Он не позволяет увеличивать номер версии, как было обещано.

Пример:

@Entity
@Table(name="some_table")
public class SomeEntity extends BaseEntity {
    //... some code

    @Column
    @Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")
    @OptimisticLock(excluded=true)
    private DateTime lastUsed = new DateTime();

    //... some code
}

Таким образом, даже если свойства lastUsed обновляются (и сохраняются), версия не будет увеличиваться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...