JAVA 뻘짓거리 모음

By | 2021년 1월 24일
Table of Contents

뻘짓거리 모음

뻘짓거리를 모아 보자.

Spring Boot JPA 관련

readOnly = true

(readOnly = true) 붙여놓고 업데이트 되길 바라는 행위.

@Service
public class ApiAccessInfoService extends CustomGenericService<ApiAccessInfoDto, ApiAccessInfo, ApiAccessInfoKeyDto, ApiAccessInfoKey> {

    // ......

    @Override
    @Transactional(readOnly = true)
    @CacheEvict(value="ApiAccessInfo")
    public void update(ApiAccessInfoKeyDto id, ApiAccessInfoDto apiAccessInfoDto) {
        super.update(id, apiAccessInfoDto);
    }
}

PK 수정 시도

PK 를 수정하려 하면 정말 이상한 오류가 발생한다.

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class ApiAccessInfoApiControllerTest {

    ApiAccessInfoKeyDto keyDto;

    @BeforeEach
    public void setUp() throws Exception {

        // ......

        keyDto = new ApiAccessInfoKeyDto();
        String accessId = "skyer91";
        String accessKey = "12345678";
        String accessIp = "127.0.0.1";
        keyDto.setAccessId(accessId);
        keyDto.setAccessKey(accessKey);
        keyDto.setAccessIp(accessIp);
    }

   // ......

    @Test
    public void update() throws URISyntaxException, JsonProcessingException {

        // given
        // ......
        ApiAccessInfoDto saved = getTestData(keyDto);
        if (saved == null) {
            saved = createTestData(keyDto);
        }

        assert saved != null;
        saved.setAccessKey("1111");

        // ......
    }
}

Transactional 에너테이션 누락

@Service
public class DailyStockSummaryService {

    // @Transactional
    public void applyStockChange(StockChangeDto stockChangeDto) {
        // ......
        repository.save(entity);
    }
    // ......
}

트랜젝션이 보장되지 않으면 이미 select 해 놓은 데이타가 삭제되지 않았음에 대한 보장이 없으므로, 매번 새로 select 하게 된다.

3 thoughts on “JAVA 뻘짓거리 모음

  1. skyer9 Post author

    비영속 상태인 객체에 영속성을 부여한다.
    DB에서 객체를 가져오면 영속성이 부여된다.
    영속성 객체는 최상단 @Transactional 블럭을 벗어날 때 flush 된다.(commit)

답글 남기기