반응형
javax.persistence.TransactionRequiredException: Executing an update/delete query
@Override
public void updateSendMasterIdx(List<PaymentTransaction> paymentTransactions, Long sendMasterIdx) {
QPaymentTransaction paymentTransaction = QPaymentTransaction.paymentTransaction;
queryFactory.update(paymentTransaction)
.where(paymentTransaction.in(paymentTransactions))
.set(paymentTransaction.sendMasterIdx, sendMasterIdx.toString())
.execute();
}
오류가 발생한 원인인 JPA를 사용한 업데이트 코드입니다.
여러 건의 알림톡을 한번에 보내고 해당 거래 내역들(PaymentTransactions)을 저장하는 상황이었습니다.
하나의 거래에 대해 여러건의 알림톡을 보내기 때문에 각각의 거래 내역은 따로 있지만 하나로 확인할 수 있는 값이 필요했습니다.
그래서 해당 거래 내역들(PaymentTransactions)을 .saveAll() 매서드로 모두 저장 후 해당 리스트의 index 0 번째 데이터를 가져와 해당 Idx를 리스트 전체에 sendMasterIdx라는 값으로 저장하려고 했습니다.
오류가 발생한 원인은 Exception의 이름 그대로입니다. Transaction Required 트랜잭션이 필수라는 것인데요.
JPA를 사용할 때 update 또는 delete 문을 직접 사용할 경우 Transaction 처리를 해줘야 합니다.
@Transactional 어노테이션을 붙이고 작동 시 에러가 바로 해결되었습니다.
반응형