Salesforce

[LWC]エラー「System.LimitException: Too many DML statements: 1」

投稿日:2025年7月13日 更新日:

SalesforceのLWC開発について

下記エラーが発生した時の原因と対策

「System.LimitException: Too many DML statements: 1」

原因と対策

結論:Apexで記述する更新処理のメソッドに、「(Cacheable=true)」をつけている。

解説:Apexで記述するメソッドをjavascriptで呼び出せるように@AuraEnabledというアノテーションをつけますね。その際、「@AuraEnabled(Cacheable=true)」こんな感じでオマケをつけることがあります。読みは「キャッシャブル」です。要するにキャッシュ可能ってことです。クライアント(画面)側にメソッドの結果をキャッシュしてあげることでパフォーマンスが良くなりますよというものですが、これはメソッドの中でデータの取得を行なっている場合のみ付けられます。作成・更新・削除処理にもかかわらず(Cacheable=true)」をつけていると、今回のエラーが出ます。

対策:「(Cacheable=true)」を外す。

簡単なコードを書きます。こういうときはつけられませんよという例です。

import {LightningElement, api} from 'lwc';
import updateAccountName from '@salesforce/apex/Example.updateAccountName';

export default class Example extends LightningElement {

   @api recordId;

   @wire(updateAccountName, {recordId:this.recordId})
   updateAccountName({ error, data }) {
       if (data) {
           console.log('success');
       } else {
           if(error){
               console.log('error');
           }
       }
   }
}
public with sharing class Example {

   // (Cacheable=true)があるのでエラー
   @AuraEnabled(Cacheable=true)
   public static void updateAccountName(String recordId){
       Account a = [SELECT Id, Name FROM Account WHERE id =: recordId];
       a.Name = 'new name';
       update a;
   }
}

おわります

-Salesforce

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

フロー承認プロセスをApexから起動する

SalesfoceのLWC開発について フロー承認プロセスをオブジェクトのカスタムボタンから起動する方法は公式のリファレンスにもあるのですが、Apexから起動する方法はなかったので調べました。 自作の …

[Visualforce][jQuery]ID指定で要素を選択する

Visualforceでの開発にて、jQueryで要素を IDで指定したいのになかなかうまく取得できなくて苦しみました。 いやだいぶハマりましたが以下にて解決 フルパスの指定は出来なかった 状況を簡単 …