전체 글137 [JPA/기본편] 값 타입 값 타입 JPA의 데이터 타입은 크게 엔티티 타입, 값 타입 두개로 분류 가능 엔티티 타입 @Entity 로 정의하는 객체 식별자 있음 식별자로 구별하고 지속 추적 가능 생명 주기가 있음 생성, 영속화, 소멸하는 생명 주기 존재 공유 가능 참조 값 공유할 수 있음 => 공유 참조 값 타입 int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입 또는 객체 식별자가 없음 생명 주기를 엔티티에 의존 ex) 회원을 삭제하면 이름, 나이필드로 함께 삭제 공유하지 않는 것이 안전 대신 값 복사해서 사용 오직 하나의 주인만이 관리해야 함 불변 객체로 만드는 것이 안전함 다시 3 가지로 나눌 수 있음 기본값 타입: 자바 기본 데이터 타입 자바 기본 타입 (int, double, …) 래퍼 클.. 2024. 3. 20. [JPA/기본편] 프록시 프록시 실제 엔티티 객체 대신 데이터베이스 조회를 지연할 수 있는 가짜 객체를 의미한다. 가짜 객체라고 해서 실제 엔티티의 동작을 수행하지 못하는 것은 아니다. 실제 엔티티 클래스를 상속받아 만들어지므로 실제 클래스와 겉모양이 같으므로 사용하는 입장에서는 진짜 객체인지 가짜 객체인지 구분하지 않고 사용하면 된다. 회원 엔티티를 조회할 때 연관된 팀 엔티티는 비즈니스 로직에 따라 사용될 때도 있지만 그렇지 않을 때도 있다. @Entity public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; private String username; @ManyToOne @JoinColumn(name = "TEAM_ID").. 2024. 3. 20. [JPA/기본편] 상속 관계 매핑 상속 관계 매핑 관계형 데이터베이스는 객체지향 언어에서 다루는 상속이라는 개념이 없다. 대신 슈퍼타입 서브타입 관계 (Super-Type Sub-Type Relationship) 라는 모델링 기법이 객체의 상속 개념과 가장 유사하다. ORM에서 이야기하는 상속 관계 매핑은 객체의 상속 구조와 데이터베이스의 슈퍼타입 서브타입 관계를 매핑하는 것이다. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델인 테이블로 구현할 때는 3가지 방법을 선택할 수 있다. 각각의 테이블로 변환 @Inheritance(strategy=IngeritanceType.JOINED) 모두 테이블로 만들고 조회할 때 조인을 사용한다. (JPA에서는 조인 전략이라 한다.) 통합 테이블로 변환 @Inheritance(strategy=Inger.. 2024. 3. 20. [JPA/기본편] 연관관계 매핑 다양한 연관관계 매핑 연관관계 매핑시 고려사항 엔티티의 연관관계를 매핑할 때는 아래 3가지를 고려해야 한다. 다중성 단방향, 양방향 연관관계의 주인 먼저 두 엔티티의 관계가 일대일인지 일대다인지 다중성을 고려해야 한다. 그리고 두 엔티티 중 한쪽만 참조하는 단방향 관계인지 서로 참조하는 양방향 관계인지 고려해야 한다. 마지막으로 양방향 관계면 연관관계의 주인을 정해야 한다. 다중성 연관관계는 4가지 종류가 있다. 다대일 (@ManyToOne) 일대다 (@OneToMany) 일대일 (@OneToOne) 다대다 (@ManyToMany) 실무에서 @ManyToMany을 통한 다대다 매핑은 권장하지 않는다. @ManyToMany을 통한 다대다는 고유한 필드를 갖지 못하기 때문이다. 단방향, 양방향 테이블은 외래.. 2024. 3. 20. [JPA/기본편] 연관관계 단방향 연관관계 여러 연관관계 중에서 다대일(N:1) 단방향 관계부터 알아보자. 객체 연관관계와 테이블 연관관계 (다:일) 위 그림을 분석해보자. 객체 연관관계회원 객체와 팀 객체는 단방향 관계이다. 회원은 Member.team 필드를 통해서 팀을 알 수 있지만 반대로 팀은 회원을 알 수 없다. 회원 객체는 Member.team 필드로 팀 객체와 연관관계를 맺는다. 테이블 연관관계회원 테이블과 팀 테이블은 양방향 관계이다. 회원 테이블의 TEAM_ID 외래 키를 통해서 회원과 팀을 조인할 수 있고 반대로 팀과 회원도 조인할 수 있다.(JOIN 사용) 회원 테이블은 TEAM_ID 외래 키로 팀 테이블과 연관관계를 맺는다. 외래 키를 이용한 양방향 조인 회원과 팀을 조인하는 SQL SELECT * FROM .. 2024. 3. 20. [JPA/기본편] 엔티티 매핑 엔티티 매핑 JPA에서 꼭 알아야 할 2가지는 JPA의 동작 원리를 이해하고 객체와 관계형 데이터베이스를 정확히 매핑하는 것이다. @Entity 역할: @Entity가 붙은 클래스는 테이블과 매핑되고 JPA가 관리한다. 속성: @Entity에 사용할 수 있는 속성으로 name이 있다. name JPA에서 사용할 엔티티 이름을 지정한다. 사용 코드 @Entity(name = "myUser") public User { ...} 기본 값은 클래스 이름을 그대로 사용한다. 활용 예 다른 패키지에 이름이 같은 엔티티 클래스가 있다면 이름을 지정해서 충돌을 피할수 있다. 주의사항 @Entity 적용 시 주의사항은 아래와 같다. 기본 생성자가 꼭 존재해야한다. (파라미터가 없는 public 또는 protected 생.. 2024. 3. 20. [JPA/기본편] 준영속 상태 준영속 상태란 영속성 컨텍스트가 관리하는 영속 상태의 엔티티가 영속성 컨텍스트에서 분리된 것이다. 준영속 엔티티는 영속성 컨텍스트가 제공하는 기능을 사용할 수 없다. 준영속 상태로 만드는 방법 영속 엔티티를 준영속 엔티티로 만드는 방법은 아래 3가지이다. em.detach(entity) : 특정 엔티티만 준영속 상태로 전환한다. em.clear() : 영속성 컨텍스트를 완전히 초기화한다. em.close() : 영속성 컨텍스트를 종료한다. 엔티티를 준영속 상태로 전환: detach() 예제를 통해 detach() 메소드 사용과 영속성 컨텍스트의 상태 변화에 대해서 알아보자. public void testDetached() { ... //회원 엔티티 생성, 비영속 상태 Member member = new .. 2024. 3. 20. [JPA/기본편] 플러시 플러시 플러시는 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영한다. 플러시를 수행하면 구체적으로 아래의 일이 일어난다. 플러시 수행 과정 변경 감지가 동작해서 영속성 컨텍스트에 있는 모든 엔티티를 스냅샷과 비교한다. 수정된 엔티티가 있다면 수정 쿼리를 만들어 쓰기 지연 SQL 저장소에 등록한다. 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송한다. (등록, 수정, 삭제 쿼리가 저장된다. 조회 쿼리는 저장되지 않고 바로바로 수행한다.) 영속성 컨텍스트 플러시 방법 영속성 컨텍스트를 플러시하는 방법은 아래 3가지이다. em.flush() 직접 호출한다. 트랜잭션 커밋 시 플러시가 자동 호출된다. JPQL 쿼리 실행 시 플러시가 자동 호출된다. 직접 호출 엔티티 매니저의 flush() 메소드를 직접 .. 2024. 3. 20. [JPA/기본편] 영속성 컨텍스트 영속성 컨텍스트 영속성 컨텍스트란 '엔티티를 영구 저장하는 환경'이다. // 객체를 생성한 상태 (비영속) Member member = new Member(); member.setId(1L); member.setName("HelloA"); EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); // 객체를 저장한 상태 (영속) em.persist(member); 영속성 컨텍스트의 특징 영속성 컨텍스트가 관리하는 엔티티는 식별자 값이 반드시 존재한다. 영속성 컨텍스트는 트랜잭션을 커밋하는 순간 SQL을 실행한다. (저장할때 x) 엔티티의 생명주기 엔티티에는 4가지 상태가 존재한다. 비영속(new/transient): 영속성 컨텍.. 2024. 3. 20. [JPA/기본편] JPA JPA - Java Persistence API (자바 진영의 ORM 기술 표준) ORM Object-relational mapping (객체 관계 매핑) 객체는 객체대로 설계 관계형 데이터베이스는 관계형 데이터베이스대로 설계 ORM 프레임워크가 중간에서 매핑 대중적인 언어에는 대부분 ORM 기술이 존재 객체와 관계형 데이터베이스를 매핑한다는 뜻 ORM 프레임워크 객체와 테이블을 매핑해서 패러다임의 불일치 문제를 개발자 대신 해결 public class JpaMain { public static void main(String[] args) { //[엔티티 매니저 팩토리] - 생성 final EntityManagerFactory emf = Persistence.createEntityManagerFactor.. 2024. 3. 19. 이전 1 ··· 5 6 7 8 9 10 11 ··· 14 다음