JPA 15

다양한 연관관계 매핑

연관관계 매핑 시 고려사항에는 3가지가 있다 다중성 (다대일, 일대다, 일대일, 다대다) 단방향, 양방향 테이블 외래 키 하나로 조인 가능 사실 방향이라는 개념이 없음 객체 참조용 필드가 있는 쪽으로 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 (사실 단방향 2개) 연관관계의 주인 (양방향) 테이블은 외래키 하나로 두 테이블이 연관관계를 맺음 객체 양방향 관계는 A->B, B->A처럼 참조가 2군데 객체 양방향 관계는 참조가 2군데 있음. 둘 중 테이블의 외래 키를 관리할 곳을 지정해야 함 연관관계의 주인 : 외래 키를 관리하는 참조 주인의 반대편 : 외래 키에 영향을 주지 않음, 단순 조회만 가능 다대일 [N : 1] N이 연관관계 주인 단방향 DB입장에서 팀이 1이고 MEMBER가 ..

JPA 2023.08.29

연관관계 매핑, 단방향, 양방향

연관관계가 필요한 이유 예제 시나리오를 통해 알아보자 회원과 팀이 있다. 회원은 하나의 팀에 소속될 수 있다. 회원과 팀은 다대일 관계이다. 만약 연관관계가 없이 객체를 테이블에 맞추어 모델링을 하면 아래와 같이 된다. 이렇게 설계를 하게 되면 Member객체에 teamId 필드를 통해 Team을 참조해야 한다. 만약 멤버의 팀을 조회하려면 아래와 같은 코드를 수행해야 한다. //조회 Member findMember = em.find(Member.class, member.getId()); Team findTeam = em.find(Team.class, findMember.getTeamId()); 이런 코드는 객체 지향적인 방법이 아니다. 객체는 참조를 사용해서 객체를 찾고 테이블은 외래키로 조인을 사용해..

JPA 2023.08.28

엔티티 매핑, 기본 키 매핑

@Entity 객체와 테이블을 매핑하기 위해서 @Entity 애노테이션을 사용한다 @Entity 애노테이션을 사용하면 그 객체는 JPA가 관리한다. 관리되는 객체는 기본 생성자(파라미터가 없는)가 필수적으로 필요하다.(public, protected) 저장할 필드에 final을 사용하면 안 된다. final, enum, interface, inner 클래스에 사용이 불가하다. Entity 중 name에 대해 알아보자 JPA에서 사용할 엔티티 이름을 지정한다 디폴트 값은 클래스의 이름이다. 디폴트 값을 사용하는 것을 권장한다 ( 같은 이름의 클래스가 없을 때) @Table 엔티티와 매핑할 테이블을 지정한다. 기본 값으로는 엔티티의 이름을 사용한다. 기본 키는 @Id 애노테이션을 사용한다. 매핑애노테이션 정..

JPA 2023.08.27

JPA 설정 하기

JPA 설정은 persistence.xml 파일에 해야 한다 위 파일의 경로는 resources/META_INF에 만들어야 한다. persistence파일을 보자 주석 참고 // h2 디비 사용 // db아이디 //db 비밀번호 //db 주소 // JPA중에 H2방언을 사용한다 //sql 보기 // sql 형식으로 예쁘게 출력 // sql 설명 // 데이터 베이스 스키마 자동 생성 JPA는 특정 데이터베이스에 종속되지 않는다 데이터 베이스에 따라 SQL 문법과 함수가 조금씩 다르다 그래서 persistence파일에 dialect에 어떤 DB를 사용할지 설정해 주어야 한다. 옵션의 DDL 자동 설정 부분을 보자 이 부분은 DDL을 설정하는 코드이다 DDL을 애플리케이션 실행 시점에 dialect정보를 활용..

JPA 2023.08.26

영속성 컨텍스트

EntityManagerFactory와 EntityManager EntityManagerFactory는 고객의 요청이 들어올 때 마다 (thread가 생성될 때마다) EntityManager를 생성한다. EntityManager은 내부적으로 DB 커넥션 pool을 사용해서 DB에 접근한다. EntityManagerFactory JPA는 EntityManagerFactory를 만들어야 한다. application loading 시점에 DB당 딱 하나만 생성되어야 한다. WAS가 종료되는 시점에 EntityManagerFactory를 닫는다. ( 내부적으로 DB 커넥션을 반환한다. EntityManager Transaction 단위를 수행할 때마다 생성한다.(고객의 요청이 들어오면 생성 후 끝나면 닫는다.)..

JPA 2023.08.26