Entity LifeCycle / 패스트캠퍼스 챌린지 14일차

망고쥬스·2021년 11월 14일
0

영속성 컨텍스트에서 관리한다고 하면 객체의 변화를 별도로 처리해주지 않더라고 DB에 반영되게 된다.

@Service
	public class UserService{
	@AutoWired
	private EntityManager entityManager;
	//@AutoWired
	//private UserRepository userRepository;

	@Transactional
	public void put(){
		User user = new User();
		user.setName("newUser");
		user.setEmail("newUser@fastcampus.com");

		//userRepository.save(user);
		entityManager.persist(user);
	}
}

result


@Service
	public class UserService{
	@AutoWired
	private EntityManager entityManager;
	//@AutoWired
	//private UserRepository userRepository;

	@Transactional
	public void put(){
		User user = new User();
		user.setName("newUser");
		user.setEmail("newUser@fastcampus.com");

		//userRepository.save(user);
		entityManager.persist(user);
        
        user.setName("newUserAfterPersist"); 
        --> insert 이후 update가 이루어지며 별도의 save를 요청하지 않아도 DB에 반영되게 된다.
	}
}


`detach기능구현`
@Service
	public class UserService{
	@AutoWired
	private EntityManager entityManager;
	//@AutoWired
	//private UserRepository userRepository;

	@Transactional
	public void put(){
		User user = new User();
		user.setName("newUser");
		user.setEmail("newUser@fastcampus.com");

		//userRepository.save(user);
		entityManager.persist(user);
		entityManager.detach(user); --->추가
        ---->persist 이후에 detach를 선언하게 되면 해당 entity는 영속성 컨텍스트에서 더 이상 관리하지 않게 된다.
        
        
        user.setName("newUserAfterPersist"); 
        --> insert 이후 update가 이루어지며 별도의 save를 요청하지 않아도 DB에 반영되게 된다.
        
	}
}

Result


영속성에서 벗어난 객체이더라도 merge를 선언하게 되면 db에 반영되게 된다

@Service
	public class UserService{
	@AutoWired
	private EntityManager entityManager;
	//@AutoWired
	//private UserRepository userRepository;

	@Transactional
	public void put(){
		User user = new User();
		user.setName("newUser");
		user.setEmail("newUser@fastcampus.com");

		//userRepository.save(user);
		entityManager.persist(user);
		entityManager.detach(user); 
        ---->persist 이후에 detach를 선언하게 되면 해당 entity는 영속성 컨텍스트에서 더 이상 관리하지 않게 된다.
        
        
        user.setName("newUserAfterPersist"); 
        --> insert 이후 update가 이루어지며 별도의 save를 요청하지 않아도 DB에 반영되게 된다.
        
		entityManager.merge(user); --->추가
        
	}
}

Result

이 처럼 하나하나 관리해주는 것 보다 save()를 사용하게 되면 모든걸 처리해주기 때문에
모든 처리가 끝나면 save()를 선언 해 주는것도 하나의 방법이다.


#패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기 #한번에끝내는Java/Spring웹개발마스터초격차패키지Online

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

https://bit.ly/3FVdhDa

profile
#newbieDeveloper #since 2021.04.06

0개의 댓글