Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

영속성을 활용한 쓰기지연

위 그림이 중요한 이유는, 영속의 상태가 상하로 2단계 갑자기 변경될수 각 상태를 이해하고 즉시쓰기전략이 아닌 지연쓰기 전략의

장점을 이해하는것과,  주의점을 아는것입니다. 영속성의 사이클 변화에서

상태가 2단계를 건너 뛸수 없음을 의미합니다.

예를 들어 Remove된 엔티티는 deatach(준영속) 상태가 될수 없습니다. 


영속성을 간단하게 설명하기위해이해하기위해서, 하나의 함수(트랜젝션에) 다양한 데이터처리를 포함하였습니다데이터 변경 처리를 진행해보겠습니다.

사용예

Code Block
languagejava
themeEmacs
public class AddressRepositoryImpl implements MyAddressRepository { 
	@PersistenceContext
	private EntityManager em;
	
	@Override
	@Transactional
	public void addAddress() {
		
		//비영속( 단순하게 엔티티 객체만 생성함)
		Address2 address2 = new Address2();
		address2.setName("영희");
		address2.setSex("여");
		address2.setAddress("서울/마포");
		
		//엔티티 저장하고, 준영속화(분리함)
		em.persist(address2);
		em.detach(address2);
		
		// 첫번째 데이터를 찾아서 삭제대기...
		Address2 firstAddress = em.find(Address2.class, 1L );
		em.remove(firstAddress);
				
		//엔티티를 다시 영속 관리객체로 복귀
		em.merge(address2);
		//추가된 엔티티의 데이터가 변경되었음으로 변경감지.
		address2.setName("영희2");
				
		//마지막 상태 Db반영(쓰기지연)
		em.flush();
		
		//준영속
		//em.detach(address2);		
		//다시영속시킴
		//em.merge(address2);				
		//예외발생-롤백
		//assertTrue(false);
	}	

...