본문 바로가기

분류 전체보기120

JPA - 기본 키 매핑 기본 키 매핑 어노테이션 직접할당 : @Id만 사용 자동생성 : @GeneratedValue (네 가지 전략) @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id 자동생성 네 가지 전략 IDENTITY : 기본 키 생성을 데이터베이스에 위임 (MySQL) SEQUENCE : 데이터베이스 시퀀스 오브젝트 사용 (Oracle), @SequenceGenerator 필요 TABLE : 키 생성용 테이블 사용, (모든 DB에서 사용), @TableGenerator 필요 AUTO : 방언에 따라 자동 지정 (기본 설정) IDENTITY 전략 • 기본 키 생성을 데이터베이스에 위임 Insert시 id값을 null 값으로 세팅해야한다. (id 값을 .. 2022. 4. 9.
JPA - 필드와 컬럼 매핑 매핑 어노테이션 정리 어노테이션 설명 @Column 컬럼 매핑 (옵션 줄거 아니면 안써도 된다) @Enumerated enum 타입 매핑 @Tempora 날짜 타입 매핑 @Lob (속성없음) BLOB, CLOB(변수가 String일 경우) 매핑 @Transient (속성없음) 필드를 컬럼에 매핑하지 않음 @Column 속성 속성 설명 기본값 name 필드와 매핑할 테이블의 컬럼 이름 객체의 필드 이름 insertable, updatable 등록 가능, 변경 가능 여부 (기본이 true기때문에 updatablee=false정도만 추가) TRUE nullable (DDL) null 값의 허용 여부를 설정한다. false로 설정하면 DDL 생성 시에 not null 제약조건이 붙는다 TRUE unique (D.. 2022. 4. 9.
JPA - 객체와 테이블 매핑 feat. 데이터베이스 스키마 자동생성 객체와 테이블 매핑 (@Entity, @Table)@Entity@Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다.JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수※ 주의• 기본 생성자 필수 (파라미터가 없는 public 또는 protected 생성자)• final 클래스, enum, interface, inner 클래스 사용X• 저장할 필드에 final 사용 X @Entity의 속성• JPA에서 사용할 엔티티 이름을 지정한다.• 기본값: 클래스 이름을 그대로 사용(예: Member)• 같은 클래스 이름이 없으면 가급적 기본값을 사용한다.  @Table@Table은 엔티티와 매핑할 테이블 지정.속성기능기본값name매핑할 테이블 이름엔티티 이름을 사용catalog데이터베이스 catal.. 2022. 4. 8.
JPA - 준영속, 병합 1. 준영속 영속성 컨텍스트가 관리하는 영속 상태의 엔티티가 영속성 컨텍스트에서 분리(detached)된 것을 준영속 상태라 한다. 준영속 상태의 엔티티는 영속성 컨텍스트가 제공하는 기능을 사용할 수 없다. 준영속 상태를 만드는 방법 3가지 1 em.detach(entity) 특정 엔티티만 준영속 상태로 전환 2 em.clear() 영속성 컨텍스트를 완전히 초기화 3 em.close() 영속성 컨텍스트를 종료 detach(Entity) public void testDetached() { // 회원 엔티티 생성, 비영속 상태 Member member = new Member(); member.setId("memberA"); member.setUsername("회원A"); // 회원 엔티티 영속 상태 em.p.. 2022. 4. 8.
JPA - 플러시 플러시 발생 영속성 컨텍스트의 변경내용을 데이터 베이스에 반영한다. 구체적으로 다음과 같은 일이 순차적으로 일어난다. 변경 감지가 동작해서 영속성 컨텍스트에 있는 모든 엔티티를 스냅샷과 비교해서 수정된 엔티티를 찾는다. 수정된 엔티티는 수정 쿼리를 만들어 쓰기 지연 SQL 저장소에 등록한다. 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송한다(등록, 수정, 삭제 쿼리) 참고로 플러시는 영속성 컨텍스트를 비우지 않는다. 플러시는 영속성 컨텍스트의 변경 사항들과 DB의 상태를 맞추는 작업이다. 영속성 컨텍스트의 변경내용을 DB에 동기화한다. 영속성 컨텍스트를 플러시하는 방법 em.flush() - 직접호출 트랜잭션 커밋 - 플러시 자동 호출 JPQL 쿼리 실행 - 플러시 자동호출 1. 직접호출 // 영.. 2022. 4. 8.