Versions Compared

Key

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

...

Expand

JPA의 영속성기능은 오라클 DBMS의 핵심기능중 축소된 Buffer Cache 처리기능과 유사해 보입니다.

필수적이지는 않으나 두가지 개념을 함께 익히면 JPA의 영속성개념을 익히는데 도움이 될듯합니다.

순서상 JPA와 별개로 관계형DB를 잘 이용하기위해서 DBMS 아키텍쳐를 익혀야하는것을 추천하며

오라클에서 관련자료를 많이 찾을수 있습니다.



CRUD Repository

영속성은 어딘가에 존재하는 논리적인 개념으로 설명하기도 이해하기도 어렵습니다. ( (sad)  정리하느라 여러가지 참고자료를 봐도 어렵네요 )

실제 존재하는 객체인 CrudRepository를 활용하여 , 영속성 관련 기능을 하나씩 사용해보겠습니다. 익숙해지는 그날까지~~

JPA에서는 기본적인 데이터 삽입/수정/조회를 위해 추가적인 구현없이 기본적인 기능을 제공하는

인터페이스를 제공해줍니다. 트랜젝션관리 영속성관리등을 직접할필요가 없기때문에 이용이 간단합니다.

단순한 서비스에서는 CrudRepository만으로도 충분합니다.데이터 추가/삭제/변경/조회등  추가구현없이, 이미 구현된 CrudRepository를 이용하면 대부분의 기능을 사용할수가 있습니다. 


인터페이스 준비

No Format
/선언
public interface GroupRepository extends CrudRepository<GroupInfo, Long> {
}
public interface UserRepository extends CrudRepository<User, Long> {
}

...


Update


Delete


Custom Repository

기본적인 데이터 입출력에서 CurdRepository 를 이용하면, 세부적인 트랜잭션 처리를 크게 신경쓸필요가 없습니다.

하지만, EntityManager(이하 em)가 관리하는 PersitenceContext를 이해하려면 

em객체를 통해 영속성과 관련된 몇가지 기능을 직접 호출해보는것이 도움이되며

조금더 복잡하고 커스텀한 트랜잭션 처리및 조회등,서비스로직과 관련된 변경처리를 

비지니스 로직이 복잡해서 CrudRepository의 인터페이스만으로는 부족하여

트랜잭션처리및 영속성상태변경을 직접 관여하고 싶을때 사용자가 직접 영속성을관리하는

EntityManage를 구현레벨에 활용할수가 있습니다.조금더 로우수준으로 구현가능합니다. 

인터페이스 준비

Code Block
languagejava
themeEmacs
public interface MyAddressRepository  {
	void someTest(Address2 address2);
}


public class AddressRepositoryImpl implements MyAddressRepository { 
	@PersistenceContext
	private EntityManager em;
	  
	@Override
	@Transactional
	public void someTest(Address2 address2) {
		em.refresh(address2);		
		em.detach(address2);
		em.persist(address2);
		em.lock(address2, null);
		em.flush();
	}	  
}
public interface AddressRepository extends JpaRepository<Address2CrudRepository<Address2, Long>,MyAddressRepository {

}

...