DEV/JPA
-
[JPA] 프록시와 연관관계 관리 (즉시로딩/지연로딩/영속성전이/고아객체)DEV/JPA 2024. 4. 29. 15:16
* 정보전달의 목적이 아닌 개인 스터디 정리 글 입니다. 강의 : 인프런 교육자 : 김영한프록시주제 : member를 조회할 때 team도 함께 조회해야할까 ? 1. em.find(Member.class, member.getId()) : DB에서 실제 엔티티 객체 조회2. em.getReference(Member.class, member.getId()) : DB조회를 미루는 프록시 객체 조회 (가짜)여기서 find로 가져온 객체와 getReference로 가져온 객체의 member class를 각각 sysout찍어보면1번은 member class2번은 member proxy 객체가 출력됨 EntityManagerFactory emf = Persistence.createEntityManagerFactory..
-
[JPA] 고급매핑 - 상속관계 매핑DEV/JPA 2024. 4. 5. 00:07
* 정보전달의 목적이 아닌 개인 스터디 정리 글 입니다. 강의 : 인프런 교육자 : 김영한 상속관계 매핑 : 객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 - 관계형 데이터베이스는 상속관계가 없다. - 슈퍼타입 서브타입 관계의 모델링 기법이 객체 상속과 유사하다. * DB 논리모델을 물리적으로 구현할수있는 방법 - 조인전략 : 모든 클래스를 각각의 테이블로 변환 - 단일 테이블 전략 : 통합된 테이블 한개로 변환 - 구현 클래스마다 테이블 전략 : 서브타입 테이블로 변환 (슈퍼타입 클래스 제외) * 주요 어노테이션 @Inheritance(strategy=InheritanceType.XXX) JOINED : 조인 전략 SINGLE_TABLE : 단일 테이블 전략 TABLE_PER_CLASS : ..
-
[JPA] 다양한 연관 관계 매핑 ( N:1 / 1:N / 1:1 / N:M )DEV/JPA 2024. 4. 4. 03:43
* 정보전달의 목적이 아닌 개인 스터디 정리 글 입니다. 강의 : 인프런 교육자 : 김영한 연관관계 매핑시 고려사항 다중성 다대일 : @ManyToOne 일대다 : @OneToMany 일대일 : @OneToOne 다대다 : @ManyYoMany 단방향, 양방향 테이블 : 외래키로 양쪽 조인 가능, 방향개념 없음 객체 : 참조용 필드가 있는 쪽으로만 참조 가능, 한쪽만 참조하면 단방향, 양쪽 서로 참조하면 양방향 연관관계의 주인 외래키를 관리하는 참조가 주인 주인의 반대편은 외래키에 영향을 주지않고 단순 조회만 가능 1. 다대일 (N:1) : 외래키있는곳에 객체 참조 걸어주기 1-1. 다대일 단방향 - 가장 많이 사용하는 연관관계 - 다대일의 반대는 일대다 1-2. 다대일 양방향 - 외래키가 있는 쪽이 연..
-
[JPA] 연관관계 매핑 기초DEV/JPA 2024. 3. 29. 17:00
* 정보전달의 목적이 아닌 개인 스터디 정리 글 입니다. 강의 : 인프런 교육자 : 김영한 연관관계가 필요한 이유 : 객체를 테이블에 맞추어 모델링 할 경우 문제 [전제조건] 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. = 회원과 팀은 N:1 관계이다. 1. 참조 대신 외래 키를 그대로 사용해야함 @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; @Column(name = "TEAM_ID") private Long teamId; // Member테이블의 외래키 … } @Entity public class Team { @Id @Genera..
-
[JPA] 엔티티 매핑DEV/JPA 2024. 3. 7. 23:19
* 정보전달의 목적이 아닌 개인 스터디 정리 글 입니다. 강의 : 인프런 교육자 : 김영한 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본키 매핑 : @Id 연관관계매핑 : @ManyToOne, @JoinColumn @Entitiy @Entity가 붙은 클래스는 JPA가 관리 * 기본 생성자 필수 * final , enum, interface, inner클래스 사용 X * 저장할 필드에 final 사용 X 속성 : name - JPA에서 사용할 엔티티 이름 지정 - 기본값은 클래스 이름을 그대로 사용 - 같은 클래스 이름이 없다면 가급적 기본값 사용 @Table @Table은 엔티티와 매핑할 테이블 지정 속성 - name : 매핑할 테이블 이름 (엔티티이름을사..
-
[JPA] 영속성 관리DEV/JPA 2024. 2. 22. 02:12
* 정보전달의 목적이 아닌 개인 스터디 정리 글 입니다. 강의 : 인프런 교육자 : 김영한 영속성 컨텍스트 → 엔티티를 영구 저장하는 환경 → EntityManager.persist(entity); 엔티티의 생명주기 - 비영속 : 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 ex ) //객체를 생성한 상태 (비영속 상태) Member meber = new Member(); member.setId(100L); member.setName("HelloJPA"); - 영속 : 영속성 컨텍스트에 관리되는 상태 ex ) EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); //객체를 저장한 상태 (영속상태) em.persist(me..
-
[JPA] 시작하기, 기본 설정DEV/JPA 2024. 2. 14. 02:40
* 정보전달의 목적이 아닌 개인 스터디 정리 글 입니다. 강의 : 인프런 교육자 : 김영한 JPA 시작하기 1. pom.xml에 JPA 하이버네이트, 사용할 데이터베이스 세팅 org.hibernate hibernate-core 6.4.2.Final com.h2database h2 2.2.224 2. /META-INF/persistence.xml JPA 설정파일 생성 * Java 17은 클래스명이 javax 에서 jakarta로 변경되었으니 유의 * JPA의 경우 특정 데이터베이스에 종속되지 않는 장점이 있음 → hibernate.dialect 속성에 지정 JPA 구동방식 1. JPA 설정파일 조회 2. 엔티티 매니저 팩토리 생성 3. 엔티티 매니저 팩토리에 의해 엔티티 매니저들을 생성 주의사항 * 엔티티..
-
[JPA] 등장 배경, 개념 정리DEV/JPA 2024. 2. 11. 02:37
* 정보전달의 목적이 아닌 개인 스터디 정리 글 입니다. 강의 : 인프런 교육자 : 김영한 JPA 등장 배경 * SQL 중심적인 개발의 문제점 CRUD → 무한 반복, 지루한 코드 관계형 DB → SQL에 의존적인 개발을 피하기 어려움 그러나, 현실적인 대안은 관계형 데이터베이스이며, 다음과 같은 패러다임의 불일치가 존재. * 객체와 관계형 데이터베이스의 차이 상속의 유무 연관 관계 객체 : 참조 사용 (ex. member.getTeam() ) 테이블 : 외래키 사용 (ex. JOIN ON T.TEAM_ID = M.TEAM_ID ) 데이터 타입 객체 != 컬럼 데이터 식별 방법 같은 식별자를 통해 DB에서 조회하여 담은 객체는 서로 다름 객체 != 객체 JPA란? JAVA Persistence API 자..