DEV/JPA
-
[JPA] 값 타입 (엔티티 타입과 비교 / 기본값타입 / 임베디드타입 / 컬렉션 값타입)DEV/JPA 2024. 6. 1. 18:35
* 정보전달의 목적이 아닌 개인 스터디 정리 글 입니다. 강의 : 인프런 교육자 : 김영한JPA 데이터 타입엔티티 타입- @Entity로 정의한 객체- 데이터가 변해도 식별자로 추적 가능ex) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입- int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체- 식별자가 없고 값만 있어 값 변경시 추적 불가ex) 숫자 100을 200으로 변경하면 다른값으로 대체됨 1. 기본값 타입: 생명주기를 엔티티에 의존하며 값 타입은 공유하여 사용할 수 없음- 자바 기본 타입 (int, double)- 래퍼 클래스 (Integer, Long)- String 2. 임베디드 타입 (복합 값 타입): 새로운 값 타입을 직접 정의할 ..
-
[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. 엔티티 매니저 팩토리에 의해 엔티티 매니저들을 생성 주의사항 * 엔티티..