2024/04/02 4

[JPA] JPA의 값 타입 (기본 값, 임베디드, 컬렉션 타입)

JPA의 데이터 타입 분류 엔티티 타입 데이터가 변해도 식별자로 지속해서 추적 가능 ex) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 @Entity로 정의하는 객체 값 타입 int, Integer, String 처럼 값으로 사용하는 자바 기본 타입이나 객체 식별자 없고 값만 있어 변경 시 추적 불가 ex) 숫자 100 -> 200 변경 시 완전히 다른 값으로 대체 값 타입 분류 기본 값 타입, 임베디드 타입, 컬렉션 타입으로 나눌 수 있다. 기본값 타입 엔티티에 생명 주기를 의존한다 (회원 엔티티를 삭제하면 필드도 함께 삭제) 값 타입은 공유하면 안된다 (회원 이름 변경시 다른 회원 이름이 변경되면 안됨) 자바의 기본 값은 항상 값을 복사한다. Integer같은 래퍼 클래스나 String..

BACK/JPA 2024.04.02

[JPA] JPA 즉시 로딩과 지연 로딩, 영속성 전이와 고아 객체

즉시 로딩과 지연 로딩 다대일 연관관계가 있는 멤버와 팀이 있을 때, 단순히 멤버 정보만 사용하는 비즈니스 로직이라서 멤버를 조회할 때 팀이 조회가 안되어도 된다고 가정하자. 이런 경우에는 지연 로딩을 쓸 수 있다. 지연 로딩 ⇒ 연관된 것을 proxy로 가져오고, 연관된 것의 실제 값을 사용하는 시점에 실제 쿼리가 나감 ex) 멤버를 사용할 땐 팀은 proxy로 가져오고, 팀의 실제 값을 사용할 때 DB에서 가져옴 Member @ManyToOne(fetch = FetchType.LAZY) // proxy 객체로 조회한다. @JoinColumn private Team team; Member 클래스만 DB에서 조회한다. Team team = new Team(); team.setName("teamA"); e..

BACK/JPA 2024.04.02

[JPA] JPA 프록시의 특징

프록시 JPA는 em.find() 말고도 참조를 가져오는 em.getReference() 라는 메소드가 있다. em.find() : 데이터베이스를 통해 실제 엔티티 객체를 바로 조회 em.getReference(): 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 (DB쿼리 안나감) Member member = new Member(); member.setUsername("hello"); em.persist(member); em.flush(); em.clear(); Member findMember = em.find(Member.class, member.getId()); System.out.println("findMember.getUsername() = " + findMember.getUserna..

BACK/JPA 2024.04.02

[JPA] TIL 6일차 - 엔티티 매핑

@ Entity @Entity가 붙은 클래스는 JPA가 관리하는 엔티티이다. 테이블과 매핑하려면 꼭 필수로 달아줘야 한다. JPA 스팩상 기본 생성자(public or protected) 가 필수로 있어야 한다. final 클래스, inner클래스, enum, interface로 사용할 수 없다. DB에 저장할 필드는 final을 사용하면 안된다. 엔티티 이름은 기본 값으로 클래스 이름을 그대로 사용한다. @Table 엔티티와 매핑할 테이블을 지정한다. @Table(name=”DB에서 매핑할 테이블 이름”) 기본값: 엔티티 이름을 사용 데이터베이스 스키마 자동 생성 JPA는 애플리케이션 로딩 시점에 DB테이블을 생성하는 기능을 지원해준다. 객체 매핑을 해놓으면 자동으로 테이블을 create 해준다. 데이..

BACK/JPA 2024.04.02