Entity 캐시, Entity LifeCycle / 패스트캠퍼스 챌린지 13일차

1934 단어 SpringbootSpringboot

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

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

https://bit.ly/3FVdhDa

좋은 웹페이지 즐겨찾기