사용자 도구

사이트 도구


wiki:spring:jpa

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
wiki:spring:jpa [2022/07/05 18:21]
dhan
wiki:spring:jpa [2023/01/13 18:44] (현재)
줄 1: 줄 1:
 ====== Spring에 JPA 적용하기 ====== ====== Spring에 JPA 적용하기 ======
 <WRAP left notice 80%> <WRAP left notice 80%>
-  * description : +  * description : JPA 관련 내용 기술
   * author      : 도봉산핵주먹   * author      : 도봉산핵주먹
   * email       : hylee@repia.com   * email       : hylee@repia.com
줄 230: 줄 230:
     실무에서 즉시 로딩을 사용하지 마라!, JPQL fetch 조인이나, 엔티티 그래프 기능을 사용해라!     실무에서 즉시 로딩을 사용하지 마라!, JPQL fetch 조인이나, 엔티티 그래프 기능을 사용해라!
     즉시 로딩은 상상하지 못한 쿼리가 나간다.     즉시 로딩은 상상하지 못한 쿼리가 나간다.
- +  
   영속성 전이(CASCADE)   영속성 전이(CASCADE)
     영속성 전이는 연관관계를 매핑하는 것과 아무 관련이 없음     영속성 전이는 연관관계를 매핑하는 것과 아무 관련이 없음
줄 251: 줄 251:
      
 ===== 값 타입 ===== ===== 값 타입 =====
 +  
   자바 기본값 타입은 공유가 불가능(복사)   자바 기본값 타입은 공유가 불가능(복사)
   래퍼 클래스는 공유가 가능하지만 변경할 방법이 없음    래퍼 클래스는 공유가 가능하지만 변경할 방법이 없음 
줄 269: 줄 270:
   대신 불변 객체(immutable object)로 설계하거나 생성자로만 값을 설정하고, 수정자로는 변경이 안되게 함(불변객체, 없애거나 private로 함)   대신 불변 객체(immutable object)로 설계하거나 생성자로만 값을 설정하고, 수정자로는 변경이 안되게 함(불변객체, 없애거나 private로 함)
   변경하려면 new를 기존 값을 가져오고, 변경하고 싶은 것만 변경하면 됨(임베디드 타입 객체 전체를 바꿔야 함. 일부만 바꾸지 말자!!)   변경하려면 new를 기존 값을 가져오고, 변경하고 싶은 것만 변경하면 됨(임베디드 타입 객체 전체를 바꿔야 함. 일부만 바꾸지 말자!!)
 +  
   실전: 임베디드 타입은 사용할 경우 불변 객체로 해서 사용하면 주석을 꼭 만들자!!   실전: 임베디드 타입은 사용할 경우 불변 객체로 해서 사용하면 주석을 꼭 만들자!!
      
줄 297: 줄 298:
     값 타입 컬렉션은 단순한 값 저장시에만 사용     값 타입 컬렉션은 단순한 값 저장시에만 사용
      
-===== 객체지향 쿼리 언어 ===== +===== 객체 지향 쿼리 언어 =====   
-   +  * [[wiki:spring:jpa:jpql|JPQL]] \\ 
-  하이버네이트가 100% 지원하는 것은 아님 + 
-  JPQL로 거의 되지만 네이티브를 사용해야 될 경우가 있음 +
-   +
-  JPQLJava Persistence Query Language ( 철저하게 잘하자 !! ) +
-    문제는 검색 쿼리 (검색 조건이 포함된 SQL 필요) +
-    엔티티 객체를 대상으로 쿼리 -> 결국에는 SQL로 변환됨(feat Dialect) +
-    객체 지행 SQL, 특정 데이터베이스 SQL에 의존하지 않음 +
-    동적쿼리를 만들기 어려움 +
-    위치기반 파라미터 매핑은 웬만하면 사용하지 말자(좋은 대안으로 해결하자) +
-    프로젝션 +
-      대상엔티티, 임베디드 타입, 스칼라 타입(숫자, 문자등 기본 데이터 타입) +
-   +
-  JPA Criteria +
-    JPQL 제너레이터 +
-    JAVA 표준이지만 쉽지 않음(복잡함, 실용성이 부족함).  +
-    SQL 문법 오류가 줄어 듦(자바 코드로 구현) +
-    동적 쿼리를 만들기 쉬움, SQL스럽지 않음 +
-    엔티티와 속성은 대소문자 구문 +
-    JPQL 키워드는 대소문자 구분하지 않음 +
-    엔티티 이름 사용, 테이블 이름이 아님(Member) +
-    별칭은 필수(m) (as는 생략 가능) - 가급적 사용하자 +
-   +
-  QueryDSL +
-    JPQL 제너레이터 +
-    단순하고 읽기 쉬움 +
-    문법 오류를 찾을 수 있음, 오타가 없음 +
-    동적 쿼리를 작성하기 쉬움 +
-    실무 사용 권장 +
-   +
-  네이티브 SQL +
-    웬만하면 지양하자 +
-   +
-  JDBC API 직접 사용, MyBatis, SpringJdbcTemplage 함께 사용 +
-    적절하게 em.persist()를 사용해야 됨 +
-   +
-  // flush -> commit, query +
-  createNativeQuery, createQuery의 경우 flush와 함께 동작 +
-   +
-   +
-  +
 ===== 적용파일 목록 ===== ===== 적용파일 목록 =====
  
줄 520: 줄 482:
 ===== Builder 사용하기 ===== ===== Builder 사용하기 =====
   * [[https://devfunny.tistory.com/423|[SpringBoot + JPA] Lombok @Builder 빌더패턴 적용기]]   * [[https://devfunny.tistory.com/423|[SpringBoot + JPA] Lombok @Builder 빌더패턴 적용기]]
-  + 
 +===== Troubleshooting ===== 
 +  * [[https://www.baeldung.com/java-hibernate-multiplebagfetchexception|A Guide to MultipleBagFetchException in Hibernate]] 
 +  * [[https://jojoldu.tistory.com/457|MultipleBagFetchException 발생시 해결 방법]] 
 + 
 +===== Ref ===== 
 +[[wiki:spring:jpa:querydsl|Querydsl]] \\ 
 {{tag>도봉산핵주먹 spring jpa 주레피 }} {{tag>도봉산핵주먹 spring jpa 주레피 }}
 +
/volume1/web/dokuwiki/data/attic/wiki/spring/jpa.1657012895.txt.gz · 마지막으로 수정됨: 2022/07/05 18:21 저자 dhan