본문 바로가기
반응형

개발/JPA16

[JPA] Hibernate Query Language(HQL) Projection / 하이버네이트 쿼리 언어 프로젝션 조회 / 특정 컬럼만 조회 / 예문 하이버네이트쿼리(hql)로 조회를 해올 때 엔티티(전체 컬럼)조회와 특정 컬럼만 조회해오는 방법!! # 엔티티 조회 entityManager.createQuery 로 select 를 해올 때 엔티티 기준으로 조회해오는 것은 쉽다 // Member 엔티티 조회 List entityList = entityManager.createQuery("select m from Member m", Member.class).getResultList(); // Member의 Team 엔티티 조회 List teamEntityList = entityManager.createQuery("select m.team from Member m", Member.class).getResultList(); List teamEntityList.. 2022. 4. 11.
[JPA] 연관관계 영속성 전이 CASCADE # CASCADE - 부모 엔티티에서 자식 엔티티로 상태를 전이하는 것 ex. 부모 엔티티 저장할 때 자식 엔티티도 함께 저장, 게시글과 첨부파일 - Parent와 Child가 라이프사이클이 동일할 때, Child를 소유하는 Parent가 하나일 때 사용하는 것이 좋음 # CascadeType ALL - 엔티티의 모든 상태 전이 PERSIST - 엔티티 persiste(영속) 전이 REMOVE - 삭제 전이 MERGE - merge 전이 REFRESH - refresh 전이 DETACH - detach 전이 [Hibernate ORM 6.0.0 User Guide 예제 코드] @Entity public class Person { @Id private Long id; private String name; .. 2022. 4. 7.
[JPA] 지연 로딩 LAZY , 즉시 로딩 EAGER # 지연 로딩 가급적 지연 로딩 사용! 연관된 엔티티를 프록시 객체로 가져옴 실제 사용할 때 프록시 초기화(디비에서 조회해서 가져옴) @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID") private Team team; # 즉시 로딩 주로 연관된 엔티티를 함께 조회해서 사용할 때 사용 조인 쿼리로 조회 ★@ManyToOne, @OneToOne => 기본이 즉시로딩이므로 Lazy로 설정해줘야함★ @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "TEAM_ID") private Team team; ★즉시 로딩은 JPQL에서 N+1 문제 일으킴★ JPQL은 SQL로 번역해서 실행함 (최적화X) -.. 2022. 4. 6.
[JPA] 프록시 entityManager.find() 데이터베이스 조회를 통해 실제 엔티티 객체 반환 entityManager.getReference() 데이터베이스 조회를 통하지 않고 프록시 엔티티 객체 반환 실제 사용시에 DB를 조회해서 실제 Entity 생성(프록시 객체 초기화) ex. member.getUsername() # 프록시 특징 - 실제 클래스를 상속 받아서 만들어짐 - 실제 클래스와 겉모양이 같음 - 사용하는 입장에서는 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 됨 - 프록시 객체는 실제 객체의 참조(target)를 보관 - 프록시 객체 호출하면 실제 target의 메소드 호출 - 처음 사용할 때 한 번만 초기화 - 프록시 객체 초기화 : 프록시가 실제 엔티티가 되는 것이 아니라 실제 엔티티.. 2022. 4. 6.
[JPA] 상속관계 매핑 - 상속 전략 DB의 슈퍼타입 서브타입 관계를 JPA에서는 객체의 상속 관계로 풀어낼 수 있다 아래 세 가지 전략 중 조인 전략을 기본으로 사용하고, TABLE PER CLASS 전략은 사용하지 않도록 하는 것이 좋다 상속 관계 (세 가지 전략 모두 상속 관계는 동일) 부모 클래스 - Item 엔티티 자식 클래스 - Album, Movie, Book 엔티티 1. 조인 전략 - 기본 상속 전략 - @Inheritance(strategy = InheritanceType.JOINED) @Entity @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn public class Item { @Id @GeneratedValue private Long id; ... 2022. 4. 6.
[JPA] 영속성 컨텍스트 / 엔티티의 생명주기 # 영속성 컨텍스트 "엔티티를 영구 저장하는 환경" EntityManager.persist(entity); // 객체를 영속성 컨텍스트에 저장(영속화) 엔티티 매니저를 통해서 영속성 컨텍스트에 접근 # 엔티티의 생명주기 1. 비영속 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 Member member = new Member(); // 비영속 2. 영속 영속성 컨텍스트에 관리되는 상태 Member member = new Member(); .. em.persist(entity); // 영속 상태 * 엔티티매니저를 통해 persist 해줘야만 영속 상태! DB에 저장되는건 아님! tx.commit(); // 트랜잭션을 커밋할때 DB에 저장 3. 준영속 영속성 컨텍스트에 저장되었다가 분리된 상태 em.det.. 2022. 3. 31.