본문 바로가기

반응형

Spring/JPA & Hibernate

(24)
플러시 플러시 란? 영속성 컨텍스트의 변경내용이 데이터베이스에 반영되는 것 변경 감지 수정된 엔티티를 쓰기 지연 SQL 저장소에 등록 쓰지 지연 SQL 저장소의 쿼리(등록, 수정, 삭제 쿼리)를 데이터베이스에 전송 플러시가 발생한다고해서 데이터베이스 트랜잭션이 커밋되는 것은 아님, 데이터베이스에 반여이되고, transaction.commit() 시 커밋 됨 또한, 영속성 컨텍스트의 쓰기 지연 SQL 쿼리들이 데이터베이스에 반영될 뿐, 1차 캐시의 내용이 삭제되는 것은 아님. 영속성 컨텍스트를 플러시하는 방법 em.flush() 로 직접 호출할 수 있다. 트랜잭션 커밋하면 플러시가 자동으로 호출된다. JPQL 쿼리 실행시 플러시가 자동으로 호출된다 Member member = new Member( 200L, "m..
영속성 컨텍스트 영속성 컨텍스트란 ? 엔티티를 영구 저장하는 환경 entityManager.persist(entity); // entity를 영속성 컨텍스트에 저장하겠다. 영속성 컨텍스트를 이용해서, 엔티티를 영속화 한다. 즉, 디비에 저장하는 것이 아니라 엔티티를 영속성 컨텍스트에 저장한다. 엔티티 매니져를 통해 영속성 컨텍스트에 접근한다. Entity Manager Factory 란? 요청이 들어오면, 엔티티 매니저를 생성한다. Entity Manager 란? 내부적으로 데이터베이스 커넥션을 이용하여 디비에 접근한다. Entity manager factory 를 통해 요청이 올 때마다 Entity manager를 생성하게 되고, 이 Entity manager는 내부적으로 db의 커넥션을 사용하여 디비에 접근하게 된다..
JPA Example public class JpaMain { public static void main( final String[] args ) { /* * javax에서 제공하는 Persistence에서 entity manager factory 얻어오기. * Persistence unit name은 persistence.xml에 기입한 * * 과 같아야 */ EntityManagerFactory emf = Persistence.createEntityManagerFactory( "hello" ); // entity namager factory 에서 entity manager 얻어오기 (database connection 받아온 것과 비슷함) EntityManager em = emf.createEntityManager(); ..
h2 database 사용하기 H2 database 다운로드 http://h2database.com/html/download.html drive 버전 맞춰야 pom.xml org.hibernate hibernate-entitymanager 5.3.10.Final com.h2database h2 1.4.199 persistence.xml 하이버네이트 properties hibernate.dialect 데이터베이스 방언 설정 JPA는 특정 데이터베이스에 종속되지 않는다. 따라서, 애플리케이션의 구성에 맞게 데이터베이스를 설정할 수 있다. 각각의 데이터베이스가 제공하는 SQL 문법과 함수는 조금씩 다름 가변 문자: MySQL은 VARCHAR, Oracle은 VARCHAR2 문자열을 자르는 함수: SQL 표준은 SUBSTRING(), Ora..
고급 매핑 상속관계 매핑 • 관계형 데이터베이스는 상속 관계 X • 슈퍼 타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사 • 상속관계 매핑: 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 위와 같은 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 세 가지 방법 • 각각 테이블로 변환 -> 조인 전략 • 통합 테이블로 변환 -> 단일 테이블 전략 • 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전 • @Inheritance(strategy=InheritanceType.XXX) • JOINED: 조인 전략 • SINGLE_TABLE: 단일 테이블 전략 • TABLE_PER_CLASS: 구현 클래스마다 테이블 전략 • @DiscriminatorColumn(name=“DTYPE”) • ..
연관관계 맵핑 연관관계 맵핑 (단방향, 양방향) 테이블 외래키 하나로 양쪽으로 조인 가능 사실 방향이라는 개념이 없다 멤버와 팀 중 하나만 외래키를 두면 됨 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 (사실 단방향이 두 개) 연관관계의 주인 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺은 객체 양방향 관계는 A->B, B ->A 처럼 참조가 두 개 객체 양방향 관계는 참조가 2군데 있음, 둘 중 테이블의 외래 키를 관리할 곳을 지정해 주어야 함 (연관관계의 주인 설정) 연관관계의 주인: 외래 키를 관리하는 참조 주인의 반대편: 외래 키에 영향을 주지 않음(update X), 단순 조회만 다대일 [N:1] 단방향 다 쪽에 외래키가 있어야 가장 많이 사용 다대일 ..
JPA 엔티티 메니저 -> 내부적으로 DB 커넥션 이용-> 영속성 컨텍스트 유지 엔티티 메니저 안에 영속성 컨텍스트가 존재 영속성 컨테스트 란? 엔티티를 영구 저장하는 환경 논리적 개념. persist : 디비에 저장하는 것이 아니라 영속성 컨텍스트에 저장한다.!! 엔티티 생명주기 - 비영속: 새로운 상태 객체만 생성한 상태. JPA와 관계 없는 상태 - 영속: 영속성 컨택스트에 의해 관리되는 상태 entity.persist(member); // member 객체를 영속성 컨텍스트에 등록한 상태 // 사실은 디비에 저장되지 않는 상태 디비 query는 트렌젝션 커밋할 때 .. - 준영속 em.detatch() - 삭제 em.remove() 영속성 컨텍스트가 존재하면, ?? 쿼리, 캐싱의 이점을 얻을 수 있다. ..
Spring JPA sql 중심 개발 SQL 상속 없음 대신, 슈퍼타입 서브타입 개념 개체지향 페러다임 제거 1. 캐싱 & 동일성 보장 2. 버퍼링 ( 쓰기 지연 ) 4. 즉시로딩, 지연로딩 영속성 콘텍스트 엔티티를 영구 저장하는 환경 EntityManager.persistence(member); 디비에 저장하는 것이 아닌, 앤티티를 영속성 컨텍스트에 저장한다는 뜻! 앤티티 콘텍스트 : 논리적 개념, 엔티티 메니저를 통해 영속성 컨텍스트에 접군/1 엔티티 메니저당 영속성 컨텍스트 생성 됨 (1:1) 엔티티 생명 주기 비영속 -> 영속 -> new Member()... em.persistence(member)

반응형