JPA - Primary Key 매핑
·
Back-End/JPA
기본 키 매핑 어노테이션 @Id 와 @GeneratedValue 직접 할당 : @Id만 사용 자동생성(@GeneratedValue) IDENTITY : 데이터베이스에 위임, MYSQL SEQUENCE : 데이터베이스 시퀸스 오브젝트 사용, ORACLE → @SequenceGenerator 필요 TABLE : 키 생성용 테이블 사용, 모든 DB에서 사용 → @TableGenerator 사용 AUTO : 방언에 따라 자동 지정, 기본값 IDENTITY 기본 키 생성을 데이터베이스에 위임 주로 MySQL, PostgreSQL, SQL Server, DB2에서 사용 JPA는 트랜잭션 커밋 시점에 INSERT SQL 실행 하지만, AUTO_INCREMENT는 데이터베이스에 INSERT SQL을 실행한 이후에 ID..
JPA - 매핑 어노테이션 정리
·
Back-End/JPA
JPA - 필드와 매핑 어노테이션 정리 매핑 어노테이션 @Column : 컬럼 매핑 @Temporal : 날짜 타입 매핑 @Enumerated : enum 타입 매핑 @Lob : BLOB, CLOB 매핑 @Transient : 특정 필드를 컬럼에 매핑하지 않음 @Entity public class Member { @Id private Long id; @Column(name = "name") private String username; private Integer age; @Enumerated(EnumType.STRING) private RoleType roleType; @Temporal(TemporalType.TIMESTAMP) private Date createdDate; @Temporal(Tempor..
JPA - 스키마 자동생성 옵션 및 DDL 생성 기능
·
Back-End/JPA
JPA - 스키마 자동생성 옵션 및 DDL 생성 기능 데이터 베이스 스키마 자동 생성 DDL을 애플리케이션 실행 시점에 자동 생성 개발할때 객체에 매핑을 해놓으면 필요한 테이블을 자동 생성해준다. DB 방언을 활용해서 데이터 베이스에 맞는 적절한 DDL 생성(h2 인경우 varchar로 생성, Oracle인 경우 varchar2 로 생성을 자동으로 해준다) 생성된 DDL은 개발 장비에서만 사용 생성된 DDL은 운영서버에서는 사용하지 않거나, 적절히 다듬은 후 사용 스키마 자동생성 속성 hibernate.hbm2ddl.auto 속성에 값을 지정 스키마 자동생성 주의할점 운영 장비에는 절대 create, create-drop, update 사용하면 안된다. 개발 초기 단계는 create 또는 update 사..
JPA - 플러시(강제 쿼리 실행)
·
Back-End/JPA
플러시란? 영속성 컨텍스트의 변경 내용을 DB에 반영하는 것 보통 트랜잭션이 커밋이 될때, 플러시가 발생한다. 영속성 컨텍스트의 변경사항과 DB를 동일하게 맞추는 작업 플러시의 동작 과정 변경 감지 수정된 Entity를 쓰기 지연 SQL 저장소에 등록 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송 (등록, 수정 삭제 쿼리) 플러시가 발생한다고 해서 commit이 발생하지는 않고, 플러시 이후 실제 commit이 일어난다. 플러시가 동작할 수 있는 이유는 데이터베이스 트랜잭션 때문이다. → 데이터베이스는 트랜잭션이 시작되고, 해당 트랜잭션이 commit이 되는 시점 이전에 동기화 해주면 되기때문 영속성 컨텍스트가 플러쉬 되는 상황 1. em.flush() 직접호출 Member member = new..
JPA - 영속성 컨텍스트, 엔티티의 생명주기, 영속성 컨텍스트의 이점
·
Back-End/JPA
영속성 컨텍스트란? 엔티티를 영구 저장하는 환경 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할 엔티티 매니저를 통해서 엔티티를 저장하거나 조회하면 엔티티 매니저가 영속성 컨텍스트에 엔티티를 보관하고 관리한다. EntityManager.persist(entity); 엔티티 매니저를 사용해서 엔티티를 영속성 컨텍스트에 저장하는 메서드 엔티티의 생명 주기 비영속(new/transient) : 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 영속(managed) :영속성 컨텍스트에 관리되는 상태 준영속(detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태 삭제(removed) : 삭제된 상태 비영속 상태 JPA와 관계 없이 객체만 생성한 상태 //객체를 생성한 상태..
[JPA] 회원 저장(CRUD), JPQL이란?
·
Back-End/JPA
JPA 환경 설정 메이븐에 라이브러리 추가 4.0.0 jpa-basic ex1-hello-jpa 1.0.0 org.hibernate hibernate-entitymanager 5.3.10.Final com.h2database h2 1.4.199 persistence.xml 설정 정보 기입 META-INF/persistence.xml에 jpa 설정정보를 기입 필수옵션, 부가옵션등을 설정 JPA를 사용하기 위해서 해당 설정 정보를 가지는 persistence-unit의 이름을 가지는 객체를 리턴받아서 사용한다. 주의점! EntityManagerFactory는 하나만 생성해서 애플리케이션 전체에서 공유 EntityManager는 쓰레드간에 공유X → 사용하고 버려야 한다. JPA의 모든 데이터 변경은 트랜잭션..