본문 바로가기

JPA16

[JPA] 연관관계 매핑 기초 (1) - 연관관계가 필요한 이유와 단방향 연관관계 본 포스팅의 이미지 저작권은 자바 ORM 표준 JPA 프로그래밍 - 기본편 (김영한) 강의에 있습니다. 연관관계가 필요한 이유 예제 시나리오 회원과 팀이 있다. 회원은 하나의 팀에만 속할 수 있다. 회원과 팀은 다대일 관계이다. 문제점 - 객체를 테이블에 맞추어 모델링한다. 객체는 따로 연관관계가 존재하지 않고, 테이블 연관관계를 따른다. Member.java @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String name; @Column(name = "TEAM_ID") private Long teamId; publi.. 2023. 7. 10.
[JPA] 엔티티 매핑 - 기본키 매핑 본 포스팅의 이미지 저작권은 자바 ORM 표준 JPA 프로그래밍 - 기본편 (김영한) 강의에 있습니다. @Id (직접 할당) JPA 엔티티 객체의 식별자로 사용할 필드에 적용한다. 자동 할당 옵션을 사용하지 않는다면, 데이터베이스에 식별자를 직접 할당해야한다. @GeneratedValue (자동 할당) @GeneratedValue(strategy = GenerationType.***) 키워드로 기본 키 자동 생성 전략을 선택할 수 있다. IDENTITY 주로 MySQL, PostgreSQL, SQL Server, DB2에서 사용한다. 예시) MySQL의 AUTO_INCREMENT @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long i.. 2023. 6. 15.
[JPA] 엔티티 매핑 - 필드와 컬럼 매핑 본 포스팅의 이미지 저작권은 자바 ORM 표준 JPA 프로그래밍 - 기본편 (김영한) 강의에 있습니다. 매핑 애노테이션 정리 @Column : 컬럼 매핑 @Temporal : 날짜 타입 매핑 @Enumerated : enum 타입 매핑 @Lob : BLOB, CLOB 매핑 @Transient : 특정 필드를 컬럼에 매핑하지 않음 @Column 속성 name : 필드와 매핑할 테이블의 컬럼 이름을 지정할 수 있다. insertable, updatable : 기본값은 true이다. false 지정 시, 해당 컬럼을 수정했을때 데이터베이스에 insert 또는 update를 하지 않는다. nullable : 기본값은 true이다. false 지정 시, DDL을 생성할 때 not null 제약 조건이 걸린다. u.. 2023. 6. 10.
[JPA] 엔티티 매핑 - 객체와 테이블 매핑, 데이터베이스 스키마 자동 생성 본 포스팅의 이미지 저작권은 자바 ORM 표준 JPA 프로그래밍 - 기본편 (김영한) 강의에 있습니다. 엔티티 매핑 소개 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑: @ManyToOne, @joinColumn 객체와 테이블 매핑 @Entity @Entity public class Member { ... } @Entity가 붙은 클래스는 JPA가 관리하며, 엔티티라 한다. 파라미터가 없는 public 또는 protected인 기본 생성자가 필수이다. JPA 스펙상 그렇다. 동적인 작업이나, Reflection, Proxy하는 작업 등을 할 때 필요하다. final class, enum, interface, inner cla.. 2023. 6. 6.
[JPA] JPA 내부 구조 (3) - 플러시 본 포스팅의 이미지 저작권은 자바 ORM 표준 JPA 프로그래밍 - 기본편 (김영한) 강의에 있습니다. 플러시(Flush) 영속성 컨텍스트의 변경내용을 데이터베이스에 동기화하는 것 데이터베이스 트랜잭션이 commit되면 flush가 자동 발생 플러시 발생하면 어떤 일이? 변경 감지 (Dirty Checking) 수정된 Entity를 쓰기 지연 SQL 저장소에 등록 쓰기 지연 SQL 저장소의 쿼리를 DB에 전송 (SELECT, UPDATE, DELETE) -> flush가 일어난다고, 데이터베이스 트랜잭션이 commit이 되는건 아니다. 트랜잭션 커밋 호출시, 커밋된다. 영속성 컨텍스트를 플러시하는 방법 다음 내용들을 직접 사용할 일은 거의 없지만, 테스트 등의 과정을 위해서 알아놔야 한다! em.flus.. 2023. 5. 28.
[JPA] JPA 내부 구조 (2) - 영속성 컨텍스트의 이점, 1차 캐시, 동일성 보장, 쓰기 지연, 변경 감지 본 포스팅의 이미지 저작권은 자바 ORM 표준 JPA 프로그래밍 - 기본편 (김영한) 강의에 있습니다. 영속성 컨텍스트의 이점 1차 캐시 영속 엔티티의 동일성(identity) 보장 트랜잭션을 지원하는 쓰기 지연 (transactional write-behind) 변경 감지(Dirty Checking) 지연 로딩(Lazy Loading) 엔티티 조회 1차 캐시 다음 시나리오에 따라, 비영속 객체가 영속성 컨텍스트의 1차 캐시에 어떻게 저장되는지 알아보자. // 새로운 멤버 객체 생성 Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); // 1차 캐시에 저장됨 em.persist(member); // 1차 캐시에.. 2023. 5. 28.
728x90
반응형