トランザクションは、ストレージに依存しない方法でサポートするのは簡単なことではありません。したがって、JayDataを使用した明示的なトランザクション管理はなく、EntityContextの暗黙的な「オールオアナッシング」動作を使用できます。webSQLに関しては、各デルタパッケージ(つまり、いくつかのadd/update
アイテムとsaveChanges()
最後のa)が同じwebSQLトランザクションで実行されます。アイテムの保存中にエラーが発生した場合、以前のすべての挿入/更新がロールバックされます。
これが実際に動作していることを示す非常に単純な例:次のコードは、2つの項目をテーブルに挿入し、重複キーエラーシナリオを作成します。最終的に、2番目の挿入が重複を拒否された場合でも、テーブルに行はありません。
$data.Entity.extend("item", {
ID: { key: true, computed: true, type: 'int' },
data: { type: 'string' }
});
$data.EntityContext.extend("ItemsContainer", {
items: { type: $data.EntitySet, elementType: item }
});
var offlinedb = new ItemsContainer({
name: 'sqLite',
databaseName: 'itemdb'
});
function createLocalData() {
offlinedb.items.add({ data: 'apple' });
offlinedb.items.add({ data: 'orange', ID:1 });
offlinedb.saveChanges(
function () {
}
);
}
これにより、プログラムレベルのロールバックが作成され、セットレベルとコンテキストレベルのイベントハンドラーをフックして、それらに例外をスローできます。詳細はこちら: http: //jaydata.org/blog/entitycontext-and-entityset-scoped-event-handlers-in-jaydata-1.2