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 하게 된다.
비영속 상태인 객체에 영속성을 부여한다.
DB에서 객체를 가져오면 영속성이 부여된다.
영속성 객체는 최상단 @Transactional 블럭을 벗어날 때 flush 된다.(commit)
https://velog.io/@kevin_/%EB%82%B4%EA%B0%80-repository.save%EB%A5%BC-%ED%86%B5%ED%95%B4%EC%84%9C-%EA%B0%9D%EC%B2%B4%EB%A5%BC-%EC%A0%80%EC%9E%A5%EC%8B%9C%EC%BC%B0%EB%8D%98-%EC%9D%B4%EC%9C%A0
repository.save()