レコードが存在する場合はレコードを更新し、存在しない場合は新しいレコードを挿入します。
最善のアプローチは何ですか?
レコードをクエリし、変更して更新するかSelect Count()
、レコードをクエリして system.queryexception をキャッチする必要がありますか?
これはすべて、REST や JS API からではなく、Apex で行われます。
レコードが存在する場合はレコードを更新し、存在しない場合は新しいレコードを挿入します。
最善のアプローチは何ですか?
レコードをクエリし、変更して更新するかSelect Count()
、レコードをクエリして system.queryexception をキャッチする必要がありますか?
これはすべて、REST や JS API からではなく、Apex で行われます。
ここですでに述べたことに加えて、これらの場合に FOR UPDATE を使用して、スーパーフェルが参照しているものを回避します。そう、
Account theAccount;
Account[] accounts = [SELECT Id FROM Account WHERE Name = 'TEST' LIMIT 1 FOR UPDATE];
if(accounts.size() == 1)
theAccount = accounts[0];
else
theAccount = new Account();
// Make modifications to theAccount, which is either:
// 1. A record-locked account that was selected OR
// 2. A new account that was just created with new Account()
upsert theAccount;
可能であればupsert呼び出しを使用する必要があります。select呼び出しの一部として親行を正しくロックするという問題に行かない限り、選択してから挿入/更新するアプローチは、同時呼び出しの領域に入ると問題になります。
リストとisEmpty()
関数で試してみます:
List<Account> a = [select id from account where name = 'blaahhhh' Limit 1];
if(a.isEmpty()){
System.debug('#### do insert');
}
else{
System.debug('#### do update');
}