기본 키 매핑 기본 키 매핑 어노테이션 @Id 기본키를 직접 할당하는 방법 ⇒ @Id만 사용하면 된다. @GeneratedValue 기본키 자동생성 기능을 위해서 사용한다. IDENTITY 전략 기본 키 생성을 DB에 위임한다. MySQL(AUTO_ INCREMENT), PostgreSQL, SQL Server, DB2에서 사용한다. 보통 JPA는 커밋 직전에 INSERT 쿼리를 실행하지만, IDENTITY 전략은 entityManager.persist() 시점에 즉시 INSERT쿼리를 실행하고 DB에서 식별자를 조회한다. 그 이유는 아래와 같다. PK값을 DB에 들어간 뒤에 알 수 있다. JPA 입장에서는 @Id(DB PK)를 알 수가 없으니 원래라면 1차캐시 안에 값을 넣을 수가 없다. 그래서 commit하는 시점.. 필드와 컬럼 매핑 매핑 어노테이션 정리 @Column : 컬럼 매핑 @Temporal : 날짜 타입 매핑 @Enumerated : enum 타입 매핑 @Lob : BLOB, CLOB 매핑 @Transient : 특정 필드를 컬럼에 매핑하지 않음(매핑 무시), DB랑 관계 없이 메모리에서만 사용한다. @Enumerated 자바 enum 타입을 매핑할 때 사용한다. 기본값은 EnumType.ORDINAL 인데, 이 떄 주의사항이 있다. ORDINAL은 0부터 시작하는 enum 순서를 DB에 저장하므로(Integer) 자바 enum타입을 매핑하기 위해 사용하려면 ORDINAL을 사용하면 안된다. enum 타입인 ROLETYPE에 순서 변화가 발생했을 때, 이전의 데이터들에게 영향을 미쳐 큰 문제가 발생하는 등 여러 곤란한 상황.. 데이터베이스 스키마 자동 생성 JPA에서 애플리케이션 로딩 시점에 CREATE 쿼리로 DB 테이블을 생성하는 기능도 지원해준다. 생성된 DDL은 운영단계에서는 사용하면 곤란하다.. 보통은 개발단계나 로컬 PC에서 개발할 때 사용한다. 객체 매핑을 다 해 놓으면 테이블이 생성되므로 객체 중심적인 개발이 가능하다. DB 방언을 활용해서 DB에 맞는 적절한 DDL을 생성한다. DB 스키마 자동 생성 - 속성 create 기존 테이블을 삭제 후 다시 생성한다. DROP + CREATE create-drop create와 같지만, 종료시점에 테이블을 DROP한다. update 변경분만 반영한다. 운영DB에서는 사용하면 안된다. 보통은 애플리케이션 코드에서 필요한 업데이트를 수행하도록 구현한다. validate 엔티티와 테이블이 정상 매핑되었는.. 객체와 테이블 매핑 엔티티 매핑 소개 객체와 테이블 매핑 ⇒ @Entity, @Table 필드와 컬럼 매핑 ⇒ @Column 기본 키 매핑 ⇒ @Id 연관관계 매핑 ⇒ @ManyToOne, (…) , @JoinColumn 객체와 테이블 매핑 @Entity @Entity 어노테이션이 붙은 클래스는 JPA에 의해 관리되고, 엔티티라고 한다. 기본 생성자가 필수이다. (파라미터 없는 public 혹은 protected) final 클래스 ,enum, interface, inner 클래스 사용할 수 없다. 저장할 필드에 final을 사용할 수 없다. name 속성 기본값은 클래스 이름과 같다. 다른 패키지의 같은 이름의 클래스가 있는 경우, 다른 이름을 쓰기 위해 사용 가능하다. @Table @Table은 엔티티와 매핑할 테이블을.. 준영속 상태 영속 상태 → 준영속 상태 영속 상태의 엔티티가 영속성 컨텍스트에서 분리된 상태이다. (detached) 준영속 상태에서는 영속성컨텍스트가 제공하는 기능을 사용할 수 없다. 준영속 상태로 만드는 법 entityManager.detach(entity) 특정 엔티티만 준영속 상태로 만든다. entityManager.clear() 엔티티 매니저 안의 영속성 컨텍스트를 초기화한다. entityManager.close() 영속성 컨텍스트를 종료한다. 준영속 상태가 되었는지 확인 UPDATE 쿼리 실행여부로 확인 저장되어있는 member의 이름을 변경한 후 준영속 상태로 만든 뒤 커밋하니, SELECT 쿼리는 실행되지만 UPDATE 쿼리는 실행되지 않는 것을 볼 수 있다. SELECT 쿼리 여러번 실행되는 것으로 .. 플러시 플러시(flush) 영속성 컨텍스트의 변경 내용을 DB에 반영하는 것 커밋 될 때 실행됨 영속성 컨텍스트의 변경 사항과 DB를 일치시키기 위해 쿼리를 날리는 과정 변경 감지 수정된 엔티티를 쓰기지연 SQL 저장소에 등록 쓰기지연 SQL 저장소의 쿼리를 DB에 전송 (등록, 수정, 삭제 쿼리) 영속성 컨텍스트를 플러시 하는 방법 emtityManager.flush() → 직접 호출하는 방법, 거의 사용하지 않는다. 트랜잭션 커밋 → 플러시 자동호출 JPQL 쿼리 실행 → 플러시 자동호출 오류 방지를 위해 무조건 flush 실행 flush를 실행하면 1차 캐시가 지워지는가? 1차캐시는 유지된다. 영속성 컨텍스트 쓰기지연 SQL 저장소에 있는 쿼리들을 DB에 반영하는 과정이다. 플러시 모드 옵션 entityM.. 이전 1 2 3 다음