オブジェクトが既ににidフィールドが設定されていない限り、createOrUpdate
を呼び出すべきではありません。 ORMLite
がデータベースに存在するかどうかを判断する方法は、クエリバイIDで行うことです。コードは次のようになります。
ID id = extractId(data);
// assume we need to create it if there is no id <<<<<<<<<<<<<<<<<<<<<<<
if (id == null || !idExists(id)) {
int numRows = create(data);
return new CreateOrUpdateStatus(true, false, numRows);
} else {
int numRows = update(data);
return new CreateOrUpdateStatus(false, true, numRows);
}
これを説明するためにjavadocsを拡張します。彼らは非常に弱いです。ごめんなさい。
これはデータベースにアイテムが存在しない場合に作成するための便利な方法です。 IDはデータ引数から抽出され、データベース上でIDによる照会が行われます。同じIDを持つデータベース内の行が存在する場合、データベース内のすべての列は、dataパラメーターのフィールドから更新されます。 idがnull(0またはその他のデフォルト値)であるか、データベースに存在しない場合、オブジェクトはデータベースに作成されます。これは、データ項目にidフィールドが定義されている必要があることも意味します。
恐ろしいです!私はこれが行動であると思われ始めました。いくつかの光を放出していただきありがとうございます。 – Quentamia
実際に私は、新しい挿入を得るために必要なデフォルト値でいくつかの光を放出するためにOPが+1している動作が必要です:)! – AgentKnopf
'generatedId = true'データベースフィールドの注釈を持つ列はどうですか?また、データベースには常に新しいエントリが作成されます。 ['Bug#173'](http://sourceforge.net/p/ormlite/bugs/173/)を参照してください。 – user2784435