본문 바로가기

Spring Data

(14)
다양한 연관관계 매핑 #6 연관관계 매핑시 고려사항 3가지 다중성 단방향, 양방향 연관관계의 주인 다중성 다대일 : @ManyToOne 일대다 : @OneToMany 일대일 : @OneToOne 다대다 : @ManyToMany 단방향, 양방향 테이블 외래 키 하나로 양쪽 조인 가능 사실 방향이라는 개념이 없음 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 연관관계 주인 테이블은 외래 키 하나로 두 테이블아 연관관계를 맺음 객체 양방향 관계는 A -> B, B -> A 처럼 참조가 2군데 객체 양방향 관계는 참조가 2군데 있음. 둘중 테이블의 외래 키를 관리할 곳을 지정해야함 연관관계의 주인 : 외래 키를 관리하는 참조 주인의 반대편 : 외래 키에 영향을 주지 않음, 단순 조회만 가..
연관관계 매핑 기초 #5 연관관계 매핑 기초 객체의 참조와 테이블의 외래 키를 매핑할 수 있다. 방향 단방향, 양방향 다중성 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:N) 연관관계의 주인 객체 양방향 연관관계는 주인을 정해야한다. 예제 시나리오 회원과 팀이 있다. 회원은 하나의 팀에만 속한다. 회원과 팀은 대대일 관계이다. @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 pri..
엔티티 매핑 #4 @Entity 속성 : name JPA에서 사용할 엔티티 이름을 지정한다. 기본값: 클래스 이름을 그댈 사용 같은 클래스 이름이 없으면 가급적 기본값을 사용한다. @Enity 적용 시 주의사항 기본 생성자는 필수. (파라미터가 없는 public 또는 protected 생성자) final 클래스, enum, interface, inner 클래스에는 사용할 수 없다. 저장할 필드에 final을 사용하면 안된다. @Table @Table은 엔티티와 매핑할 테이블 지정 속성 기능 기본값 name 매핑할 테이블 이름 엔티티 이름 사용 catalog 데이터베이스 catalog 매핑 schema 데이터베이스 schema 매핑 uniqueConstraints(DDL) DDL 생성 시 유니크 제약 조건 생성 데이터베이스..
영속성 관리 - 내부 동작 방식 #3 엔티티 매니저 팩토리와 엔티티 매니저 영속성 컨텍스트 "엔티티를 영구 저장하는 환경" 이라는 뜻. 영속성 컨텍스트는 논리적인 개념 눈에 보이지 않는다. 엔티티 매니저를 통해서 영속성 컨텍스트에 접근 엔티티의 생명주기 비영속 (new / transient) : 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 영속 (managed) : 영속성 컨텍스트에 관리되는 상태 준영속 (detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태 삭제 (removed) : 삭제된 상태 비영속과 영속 준영속과 삭제 //회원 엔티티를 영속성 컨텍스트에서 분리, 준영속 상태 em.detach(member); //객체를 삭제한 상태(삭제) em.remove(member); 영속성 컨텍스트의 이점 1차 캐시 동일성(iden..
JPA 시작하기 #2
JPA 소개 #1 JPA? Java Persistence API 자바 진영의 ORM 기술 표준 ORM ? Object - Relational - Mapping(객체 관계 매핑) 객체는 객체대로 설계 관계형 데이터베이스는 관계형 데이터베이스대로 설계 ORM 프레임워크가 중간에서 매핑 대중적인 언어에는 대부분 ORM 기술이 존재 JPA는 애플리케이션과 JDBC사이에서 동작 JPA를 왜 사용하는가? SQL 중심적인 개발에서 객체 중심으로 개발 생산성 유지보수 패러다임의 불일치 해결 성능 데이터 접근 추상화와 베더 독립성 표준 생산성 - JPA와 CRUD 저장 : jpa.persist(member); 조회 : Member member = jpa.find(memberId); 수정 : member.setName("변경할 이름"); ..