2014-02-09 5 views
2

В ActiveRecord существует концепция locking records для обновлений, чтобы гарантировать, что устаревший объект не будет сохранен в базе данных.ActiveAndroid: блокировать записи для обновлений?

Есть ли эквивалентная функциональность в ActiveAndroid? Если да, есть ли ссылка, показывающая, как это сделать? Если нет, то какой лучший способ предотвратить сохранение устаревших объектов в db?

+0

Вы имеете в виду не сохранение дубликатов? – user2511882

+0

Не совсем. Скажем, вы запрашиваете объект, A = Foo (1), а затем вы запрашиваете B = Foo (1). Теперь у вас есть два объекта (A & B), представляющие запись с id = 1. Теперь, если вы измените A, а затем сохраните, B теперь станет устаревшим, потому что он не имеет последних изменений, внесенных в A. – WindsurferOak

ответ

0

ActiveAndroid имеет концепцию beginTransaction() and endTransaction(), которая в основном похожа на концепцию locking record в activeRecord. Используя beginTransaction(), вы гарантируете, что при любых изменениях, внесенных в метод или данные, никакой другой объект не может помешать процессу. После выполнения endTransaction() метод «разблокирован», и другие объекты могут начать взаимодействовать с ним.

+0

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

+0

Простите меня, если я ошибаюсь, так как я учусь использовать ActiveAndroid самостоятельно, но насколько я знаю, activeAndroid подходит к SQLite, который сам по себе блокирует базу данных при чтении, записи и т. Д. – user2511882

+0

да, это верный; но опять же, насколько я знаю, вы можете обновить устаревшие данные. – WindsurferOak

0

Я не знаю ответа, но то, что я делаю, объявляет уникальное поле в моем классе модели, а onUniqueConflict заменяет старую запись новой.

@Column(name = "userId", notNull = true,unique = true,onUniqueConflict = Column.ConflictAction.REPLACE) 
    private String userId; 
Смежные вопросы