JPA 42

[JPA] 단방향 연관관계

객체 지향 모델링 (객체 연관관계 사용) Member 객체가 Team 객체를 참조 MEMBER 테이블은 변화 없이 TEAM 테이블을 외래키로 가지고 있음 (객체의 참조와 테이블의 외래 키를 매핑) @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; private int age; // @Column(name = "TEAM_ID") // private Long teamId; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; … @ManyToOne : 해당 클래스와 다대일 관계 @JoinColumn을 ..

[JPA] 연관관계가 필요한 이유

예제 시나리오 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원과 팀은 다대일 관계다. 객체를 테이블에 맞추어 모델링 (연관관계가 없는 객체) (참조 대신에 외래 키를 그대로 사용) @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; @Column(name = "TEAM_ID") private Long teamId; … } @Entity public class Team { @Id @GeneratedValue private Long id; private String name; … } (외래 키 식별자를 직접 다룸) //팀 저장 Team te..

[JPA] 기본 키 매핑

기본 키 매핑 기본 키 매핑 어노테이션 @Id @GeneratedValue @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; 기본 키 매핑 방법 직접 할당: @Id만 사용 자동 생성: (@GeneratedValue) IDENTITY: 데이터베이스에 위임, MYSQL SEQUENCE: 데이터베이스 시퀀스 오브젝트 사용, ORACLE @SequenceGenerator 필요 TABLE: 키 생성용 테이블 사용, 모든 DB에서 사용 @TableGenerator 필요 AUTO: 방언에 따라 자동 지정, 기본값 IDENTITY 전략 - 특징 기본 키 생성을 데이터베이스에 위임 주로 MySQL, PostgreSQL, SQL Server, DB2..

JPA/Entity Mapping 2023.02.26

[JPA] 필드와 컬럼 매핑

Member 클래스 요구사항 예시 회원은 일반 회원과 관리자로 구분해야 한다. 회원 가입일과 수정일이 있어야 한다. 회원을 설명할 수 있는 필드가 있어야 한다. 이 필드는 길이 제한이 없다. @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(TemporalType.TIMESTAMP) private Date lastModi..

JPA/Entity Mapping 2023.02.26

[JPA] 데이터베이스 스키마 자동 생성

데이터베이스 스키마 자동 생성 DDL을 애플리케이션 실행 시점에 자동 생성 테이블 중심 -> 객체 중심 데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL 생성 이렇게 생성된 DDL은 개발 장비에서만 사용 생성된 DDL은 운영서버에서는 사용하지 않거나, 적절히 다듬은 후 사용 persistence.xml 데이터베이스 스키마 자동 생성 - 속성 hibernate.hbm2ddl.auto 옵션 설명 create 기존테이블 삭제 후 다시 생성 (DROP + CREATE) create-drop create와 같으나 종료시점에 테이블 DROP update 변경분만 반영 (운영DB에는 사용하면 안됨) validate 엔티티와 테이블이 정상 매핑되었는지만 확인 none 사용하지 않음 (관례상 표현) 데이터베..

JPA/Entity Mapping 2023.02.26

[JPA] 객체와 테이블 매핑

Entity Mapping 소개 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne, @JoinColumn 객체와 테이블 매핑 @Entity @Entity가 붙은 클래스는 JPA가 관리, 엔티티라고 한다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 주의 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자) final 클래스, enum, interface, inner 클래스 사용 X 저장할 필드에 final 사용 X @Entity 속성 정리 속성 : name JPA에서 사용할 엔티티 이름 지정 기본값 : 클래스 이름을 그대로 사용 (예 : Member) 같은 클래스..

JPA/Entity Mapping 2023.02.26

[JPA] 플러시(Flush)

플러시 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영 플러시 발생 변경 감지 수정된 엔티티 쓰기 지연 SQL 저장소에 등록 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송 (등록, 수정, 삭제 쿼리) 영속성 컨텍스트를 플러시 하는 방법 em.flush() - 직접 호출 트랜잭션 커밋 - 플러시 자동 호출 JPQL 쿼리 실행 - 플러시 자동 호출 플러시 모드 옵션 FlushModeType.AUTO 커밋이나 쿼리를 실행할 때 플러시 (기본값) FlushModeType.COMMIT 커밋할 때만 플러시 플러시 주의사항 영속성 컨텍스트를 비우지 않음 영속성 컨텍스트의 변경내용을 데이터베이스에 동기화 트랜잭션이라는 작업 단위가 중요 -> 커밋 직전에만 동기화하면 됨 출처 : https://www.infle..

[JPA] 영속성 컨텍스트

JPA에서 가장 중요한 2가지 객체와 관계형 데이터베이스 매핑 (Object Relational Mapping) 영속성 컨텍스트 영속성 컨텍스트 엔티티를 영구 저장하는 환경 EntityManager.persist(entity); 논리적인 개념 엔티티 매니저를 통해서 영속성 컨텍스트에 접근 Entity 생명주기 비영속 (new/transient) 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 영속 (managed) 영속성 컨텍스트에 관리되는 상태 준영속 (detached) 영속성 컨텍스트에 저장되었다가 분리된 상태 삭제 (removed) 삭제된 상태 비영속 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 영속 영속성 컨텍스트에 관리되는 상태 준영속, 삭제 영속성 컨텍스트의 이점 1차 캐시 동일성(iden..

[JPA] JPA 기본 동작 및 JPQL 소개

객체와 테이블 생성 및 매핑 @Entity: JPA가 관리할 객체 @Id: 데이터베이스 PK와 매핑 엔티티 매니저 팩토리, 엔티티 매니저, 트랜잭션 EntityManagerFactory : EntityManager 생성 EntityManager : Entity 관리 EntityTransaction : 하나의 작업 단위 주의) 엔티티 매니저 팩토리는 하나만 생성해서 애플리케이션 전체에서 공유 엔티티 매니저는 스레드 간에 공유 X (사용하고 버려야 한다). JPA의 모든 데이터 변경은 트랜잭션 안에서 실행 JPQL 소개 가장 단순한 조회 방법 EntityManager.find() 객체 그래프 탐색(a.getB().getC()) JPA를 사용하면 엔티티 객체를 중심으로 개발 문제는 검색 쿼리 검색을 할 때도 ..

JPA/개념 2023.02.21