Entity 캐시, Entity LifeCycle / 패스트캠퍼스 챌린지 13일차
Repository.flush()
영속성 컨텍스트에 쌓여있는 데이터는 entity매니저가 자동으로 DB의 영속화를 해주지만,
개발자가 의도한 타이밍에 영속성을 일으키지 않는다. 개발자가 원하는 타이밍에 실행하려면 flush를 사용하여야 한다.
만약 flush를 남발하게 되면 영속성 캐시의 역할을 제대로 활용하지 못하게 됨에 주의해야한다.
또 다른 DB에 반영되는 경우는
Transction이 종료되는 경우 DB에 반영되게 된다.
save()의 실제 구현체를 보면 @Transactional이 구현되어 있다.
로직의 @Transcational을 걸게 되면 전체 메서드가 종료되게 되면 자동으로 flush가 일어나게 된다.
Entity 매니저가 관리하는 Entity가 어떻게 관리되는지, 생애주기에 대해 알아보자.
LifeCycle은 4가지의 상태가 존재한다
비영속상태 (new)
영속상태 (managed)
준영속상태
삭제상태 (removed)
비영속상태
: 영속성 컨텍스트가 해당 Entity객체를 관리하지 않는 상태
@Transient 를 선언하면 비영속상태를 유지하게 된다.
선언하면 Entity로 취급되는게 아닌 하나의 단순한 Java Object로 취급된다고 생각하면 된다.
Service Package 생성
UserService.java
@Service
public class UserService{
@Transactional
public void put(){
User user = new User();
user.setName("newUser");
user.setEmail("[email protected]");
}
UserServiceTest.java
@SpringBootTest
class UserServiceTest{
@AutoWired
private UserService userService;
@AutoWired
private UserRepository userRepository;
@Test
void test(){
userService.put();
System.out.println(">>> "+ userRepository.findByEmail("[email protected]"));
}
result
select 쿼리가 돌긴하지만 실질적인 값은 존재하지 않는다.
Entity로서 user라는 객체가 db와 연결이 된게 아니라 java객채로만 존재합니다.
영속화 되지 않고 garbage collector를 통해 구현되고 사라지는 객체로 취급한다.
#패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기 #한번에끝내는Java/Spring웹개발마스터초격차패키지Online
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
Author And Source
이 문제에 관하여(Entity 캐시, Entity LifeCycle / 패스트캠퍼스 챌린지 13일차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mangojuice/Entity-캐시-패스트캠퍼스-챌린지-13일차저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)