728x90
최근 GraphQL + JPA 공부를 하다가 아래와 같은 오류를 접하게 되었다.
위의 오류를 해석해보면 업데이트와 삭제시 발생할 수 있는 예외처리로 떨어졌다....
사실 위의 오류만 확인해서는 어떤 문제인지 정확하게 알기 어렵다.
일단 로직을 하나씩 봐보도록 하자
1. 서비스 로직
public Boolean updateMemberEmailMask(String memberid) throws Exception{
// 1. 맴버 이메일 조회
List<Member> memberList = memberRepository.findAll();
String memberEnEmail = null;
for(Member member : memberList){
if(member.getMemberid().equals(memberid)){
// 2. 이메일 마스킹 처리
String memberEmail = maskingService.maskingMemberEmail(member.getMemberemail());
// 3. 마스킹 된 이메일 업데이트
int chk = memberRepository.updateMemberEmailMask(memberid, memberEmail);
// 4. 업데이트 체크
if(chk == 0){
return false;
}
}
}
return true;
}
서비스 로직에서는 이메일 조회 후 마스킹 처리, 마스킹 처리 완료 시 테이블에 업데이트를 하는 로직이다.
2. 레파지토리 로직
public interface MemberRepository extends JpaRepository<Member, Integer> {
// memberIdUpdate
@Modifying
@Query("update member m set m.memberemail = :memberEmail where m.memberid = :memberId")
int updateMemberEmailMask(@Param("memberId")String memberId, @Param("memberEmail")String memberEmail) throws Exception;
}
또한 데이터 조회는 JPA의 기본 find를 사용하지만 UPDATE의 경우 직접 JPQL로 작성하였다.
코드를 보다가 느낀 건데... Transaction 처리를 하지 않아서 발생한 오류이다.
Update/Delete의 경우 Transactional을 이용하여 lock 혹은 오류 발생 시 롤백 처리를 해야하기 때문에 Transaction 처리가 필요하다.
public interface MemberRepository extends JpaRepository<Member, Integer> {
// memberIdUpdate
@Transactional
@Modifying
@Query("update member m set m.memberemail = :memberEmail where m.memberid = :memberId")
int updateMemberEmailMask(@Param("memberId")String memberId, @Param("memberEmail")String memberEmail) throws Exception;
}
따라서 위와 같이 @Transactional을 추가해주면 오류는 해결된다.
728x90
'Programing > Error Resolution(오류해결)' 카테고리의 다른 글
maven resources compiler : Maven Project Configuration for Module isn't~ 오류 해결하기 (1) | 2023.03.13 |
---|---|
세무민의 코딩일기 : application.yml 파일 내 변수 생성 후 @Value 호출 시 Null 가져오는 문제 해결 (0) | 2022.11.24 |
npm install unexpected token in json at position 오류 (0) | 2022.11.03 |
세무민의 코딩일기 : String cannot be resolved to a type 해결하기 (0) | 2022.09.28 |
세무민의 코딩일기 : Failed to deploy distro docker-desktop 오류 해결 (0) | 2022.03.27 |