2014-02-09 77 views
2

在ActiveRecord中,有一個更新的概念locking records以確保陳舊的對象不會保存到數據庫。ActiveAndroid:鎖定更新記錄?

在ActiveAndroid中是否有等價的功能?如果是這樣,有鏈接顯示如何做到這一點?如果沒有,最好的辦法是防止陳舊的對象被保存到數據庫中?

+0

你的意思是不保存重複? – user2511882

+0

不完全。假設你查詢一個對象,A = Foo(1),然後查詢B = Foo(1)。您現在有兩個對象(A和B)表示id = 1的記錄。現在,如果您修改A然後保存,則B現在將變得陳舊,因爲它沒有對A進行的最新更改。 – WindsurferOak

回答

0

ActiveAndroid的概念爲beginTransaction() and endTransaction(),它基本上與activeRecord中的locking record概念類似。通過使用beginTransaction(),可以確保在訪問方法或數據的任何更改時,其他對象都不會干擾該過程。一旦執行endTransaction(),該方法就會「解鎖」,其他對象可以開始與其交互。

+0

事務服務於不同目的。事務通常用於批量更新/插入/刪除,以便全部成功或全部失敗。它也提高了這些操作的性能。它不會阻止更新舊的對象。 – WindsurferOak

+0

請原諒我,如果我在這裏錯了,因爲我學習使用ActiveAndroid我自己,但據我所知activeAndroid映射到SQLite,它自己在讀,寫等數據庫時鎖定... – user2511882

+0

是的,這是正確;但是,據我所知,仍然可以更新陳舊的數據。 – WindsurferOak

0

我不知道答案,但我正在做的是,在我的模型類中聲明唯一字段,並使用uniqueconflict替換舊記錄。

@Column(name = "userId", notNull = true,unique = true,onUniqueConflict = Column.ConflictAction.REPLACE) 
    private String userId;