JPA

·JPA
01. 양방향 매핑 양방향 매핑 양방향으로 참조할 수 있는 것을 양방향 매핑이라고 한다. 테이블 연관 관계에서는, Team 입장에서 속한 Member를 알려면 Team의 TEAM_ID와 Member의 TEAM_ID를 조인하면 된다. 반대로 Member 입장에서 속한 Team을 알려면 Member의 TEAM_ID와 Team의 TEAM_ID를 조인하면 된다. 결국 같은 말이다. 즉 테이블 연관관계에서는, 외래키 하나로 양방향이 존재하는 것이다. 하지만 객체 연관관계의 경우에는 그렇지 않다. 양방향 객체 연관관계 양방향 객체 연관관계를 그림으로 나타내면 다음과 같다. 이를 코드로 나타내면 다음과 같다. Member 엔티티는 단방향과 동일하고, Team 엔티티만 Member를 List 형식으로 추가하면 된다. ..
·JPA
01. 간단한 용어 정리 방향 (Direction) : 단방향, 양방향 다중성 (Multiplicity) : 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:N) 연관관계의 주인 (Owner) : 객체 양항뱡 연관관계는 관리 주인이 필요하다. 02. 연관관계가 필요한 이유 객체를 테이블에 맞추어 모델링 하는 경우 즉, 연관관계가 없는 객체를 말한다. 이 경우, 참조 대신에 외래 키를 그대로 사용한다. Entity는 다음과 같이 작성할 수 있다. @Entity @Getter @Setter public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; @Column..
·JPA
01. 요구사항 추가 정리 요구사항은 다음과 같다. 회원은 일반 회원과 관리자로 구분된다. 회원 가입일과 수정일이 있어야 한다. 회원을 설명하는 필드가 있어야 하고, 이 필드는 길이 제한이 없다. 02. 요구사항에 따른 코드 및 Mapping Annotation 정리 요구사항에 따른 코드 다음은 Member 클래스이다. @Entity @Getter @Setter public class Member { @Id private Long id; @Column(name = "name") private String username; private Integer age; @Enumerated(EnumType.STRING) private RoleType roleType; @Temporal(TemporalType.TIM..
·JPA
01. 데이터베이스 스키마 자동 생성 데이터베이스 스키마 자동 생성 DDL(Data Definition Language)을 애플리케이션 실행 시점에 자동으로 생성한다는 뜻이다. 테이블 중심보다는 객체 중심이다. 데이터베이스 방언을 활용하여 데이터베이스에 맞는 적절한 DDL이 생성된다. 생성된 DDL은 개발 장비에서만 활용해야 한다. 운영서버에서는 사용하지 않기를 적극 권장하고, 적절히 다듬은 후 사용해야 한다. 02. 데이터베이스 스키마 자동 생성의 속성 속성은 다음과 같다. 옵션 설명 create 기존테이블 삭제 후 다시 생성 (drop + create) create-drop create와 동일하지만 종료 시 테이블 drop update 변경된 내용만 반영 validate 엔티티와 테이블이 정상 매핑되..
·JPA
01. @Entity @Entity란? @Entity가 붙은 클래스는 JPA가 관리한다. JPA로 테이블과 매핑할 클래스는 @Entity를 꼭! 붙여야 한다. @Entity 사용 시 주의할 점 파라미터가 없고 접근 지정자는 public 혹은 protected인 기본 생성자가 필수로 있어야 한다. final 클래스, inner 클래스, enum, interface 에 사용하면 안된다. 저장할 필드에 final을 사용하면 안된다. @Entity의 속성 name JPA에서 사용할 엔티티 이름을 지정한다. 기본값은 클래스 이름을 그대로 사용하는 것이다. 같은 클래스 이름이 없으면 가급적 기본값을 사용하는 것이 좋다. 02. @Table @Table이란? 엔티티와 매핑할 테이블을 지정하는 것이다. @Table의 ..
·JPA
01. 준영속 상태 준영속 상태란? 영속 상태에서 준영속 상태로 바뀌면, 영속 상태의 엔티티가 영속성 컨텍스트에서 분리(detached)됨을 말한다. 따라서 영속성 컨텍스트가 제공하는 기능을 사용하지 못한다. 영속 상태란? JPA가 관리하는 상태로, 1차 캐시에 올라간 상태이다. 02. 준영속 상태로 만드는 방법 1) em.detach(entity) : 특정 엔티티만 준영속 상태로 전환한다. 2) em.clear() : 영속성 컨텍스트를 완전히 초기화한다. 3) em.close() : 영속성 컨텍스트를 종료한다. 03. 준영속 상태 예시 코드 detach 예시 코드 em.detach(member) 코드는 더 이상 member를 JPA에서 관리하지 않도록 하는 것이다. detach 했기 때문에 update..
·JPA
01. 플러시의 개념 플러시란? 영속성 컨텍스트의 변경내용을 데이터베이스에 반영하는 것이다. 플러시라는 용어 때문에 혼동이 올 수 있는데, 영속성 컨텍스트를 비우는 것이 절대 아니다. 영속성 컨텍스트의 변경내용을 데이터베이스에 동기화 하는 것이다. 트랜잭션이라는 작업 단위를 기준으로, 커밋 직전에만 동기화를 하면 된다. 플러시가 발생한다는 것은 무엇일까? 변경을 감지하는 것이다. 수정된 엔티티 쓰기 지연 SQL 저장소에 등록하는 것이다. 쓰기 지연 SQL 저장소의 쿼리문(등록, 수정, 삭제)을 데이터베이스에 전송하는 것이다. 02. 영속성 컨텍스트를 플러시하는 방법 플러시하는 방법 em.flush()를 직접 호출한다. (수동) 트랜잭션 커밋 시 플러시가 자동 호출된다. JPQL 쿼리를 실행하면 플러시가 ..
·JPA
01. 영속성 컨텍스트의 개념 JPA에서 가장 중요한 것은 객체와 관계형 데이터베이스의 매핑하기, 그리고 영속성 컨텍스트라고 할 수 있다. EntityManagerFactory와 EntityManager의 동작 사용자로부터 요청이 들어오면 웹 어플리케이션에서, EntityManagerFactory가 EntityManager를 생성하고, EntityManager는 커넥션 풀에 있는 Connection 객체를 사용하여 DB에 접근한다. 영속성 컨텍스트란? JPA를 이해하는데 가장 중요한 용어 중 하나로,엔티티를 영구 저장하는 환경이라는 뜻이다. 논리적인 개념으로 눈에 보이지 않는다. EntityManager.persist(entity); 처럼, EntityMananger를 통해 영속성 컨텍스트에 접근이 가능..
coding-orange
'JPA' 카테고리의 글 목록 (3 Page)