일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 인프런
- Spring Boot
- SpringBoot
- 백준
- 스프링 핵심 기능
- JDBC
- 김영한
- Android
- Greedy
- Proxy
- Exception
- springdatajpa
- spring
- 스프링 핵심 원리
- http
- db
- 자바
- transaction
- kotlin
- Thymeleaf
- pointcut
- Servlet
- 스프링
- jpa
- JPQL
- 그리디
- AOP
- 알고리즘
- QueryDSL
- java
- Today
- Total
목록jpa (149)
개발자되기 프로젝트
영속성 컨텍스트가 가지고 있는 캐시를 이용하여 DB와 불일치하는 문제 자주있음. 1. local date time 의 scale auto DDL에서 local date time은 기본적으로 localDateTime(6)으로 생성한다. 하지만 실제로 auto ddl을 통해 db를 생성하는 일은 거의 없다. 이미 만들어진 DB에 JPA를 맵핑하여 사용한다. 만약 DB의 date time의 sacle이 6가 아니라면..? Column class에 commentedAt을 만들고 DB에서 1초단위 까지 입력되도록 해당 column에 columnDefinition = "datetime"을 입력해준다. @Column(columnDefinition = "datetime") //초단위가지만 private LocalDat..
1. Fetch Type이란? Entity 를 조회할 경우 해당 Entity와 연관관계에 있는 Entity를 어떻게 가져올 것인지 설정하는 값이다. - 연관 관계에 있는 Entity 를 모두 가져온다 → Eager - 연관 관계에 있는 Entity 를 getter 로 접근할 때 가져온다 → Lazy 2. Lazy fetch Lazy Fetch는 연관관계에 있는 Entity를 바로 가져오는 것이 아니라 연관관계의 entity를 getter로 호출할 때만 가져온다. User class를 보자. user와 userHIstory는 1:N관계이다. User를 호출할 때 마다 UserHistory도 항상 불러와야 할까?? 항상 필요하지도 않은데..? UserHistory가 필요한 시점에만 쿼리를 실행하면 되지 않을..
Embedded 타입이란? 값 타입의 일종으로 복합 값 타입으로 이해하면 된다. 여러개의 값을 모아서 하나의 값으로 사용함. - ex) (x, y) -> point 값 타입이란 값 타입은 int, Integer, String과 같이 값을 가지고 있는 타입들이 속한다. Embedded type은 여러개의 값을 묶어서 하나의 값으로 만들 수 있다. embedded된 객체를 하나의 값으로 인식하자. embedded된 객체를 활용하여 좀 더 객체 지향적, 깔끔한 코드를 작성이 가능하다. 1. embedded type없이 User class에 주소를 추해주자. private String city; private String district; private String detail; private String zi..
1. Converter란? entity와 DB사이에서 동작하며 말 그래도 converter의 역할을 한다. 즉 어떤 정보를 Entity에 저장하는 type과 DB에 저장하는 type다를 경우 중간에서 변환하는 기능을 제공한다. 2. 준비 책의 상태를 추가해보자. DB에는 int(코드)로 status를 저장하고 entity는 boolean타입으로 관리한다고 해보자. 예를들어 DB에 어떤 책의 status가 200이라고 하면, 이는 현재 미판매(전시)되어있고 isDisplayed()는 true를 반환한다. private int status; //판매상태 public boolean isDisplayed(){ return status == 200; } insert into book(id, name, publis..
@Query @Query를 사용하는 이유!에 대해 알아보자 1. 이름이 길어지는 경우 가독성을 좋게 변경하기 위해 다음과 같이 이름이 굉장히 킨 query method가 있다고 해보자. List findByCategoryIsNull AndNameEquals AndCr.. bsh-developer.tistory.com 1. Native Query? JPA에서 JPQL을 사용할 수 없을 때, SQL을 직접 사용할 수 있는 옵션이다. dialect를 사용할 수 없다, 따라서 특정 DB에 의존성을 가진 query를 만들게됨. 즉, DB종류가 변경되면 code변경시 자동으로 해당 DB를 반영해주는 JPA기능 활용이 불가능. 2. 사용법 기존 @Query에서 nativeQuery = true를 적용하면 된다. [n..
The Stpring team recommends that you annotate only concrete classeds with the @Transactinal annotation as apposed to annotating interfaces. you certainly can place the @Transactional annotation on an interface( or an interface method), but this works only as you would expect it to if you use inferface-based proxies. 1. @Transactional은 interface보다는 구체 class에 사용하는 것을 권장 2. interface는, interface-ba..
@Query를 사용하는 이유!에 대해 알아보자 1. 이름이 길어지는 경우 가독성을 좋게 변경하기 위해 다음과 같이 이름이 굉장히 킨 query method가 있다고 해보자. List findByCategoryIsNull AndNameEquals AndCreatedAtGreaterThanEqual AndUpdatedAtGreaterThanEqual (String name, LocalDateTime createdAt, LocalDateTime updatedAt); category는 null이고, 주입한 이름과 동일하며, 주입한 createdAt & updatedAt보다 크거나 같은 값을 찾는 쿼리이다. 테스트도 노답이다. @Test void queryTest(){ System.out.println("find..
JPQL : Java Persistence Query Language, table이 아닌 JPA Entity를 기반으로하는 query생성. 따라서 createdAt의 경우 table의 created_at이 아니라 실제 field에서 사용한 이름을 사용했음. query를 만들 때 static한 값 뿐 만 아니라 동적인 값도 필요하다.(ex. createdAt, updatedAt) 해당 동적 parameter를 query에 넣어주는 방법은 두 가지가 있다. 1. ???????????? ?1, ?2, ?3, ?4 등등등 몇 번째 parameter를 넣을 것인가? 간단하게 사용할 수 있지만, 만약 새로운 변수가 중간에 들어간다면 문제가 발생할 수 있다. 2. @Param 가장 권장하는 방법! Parameter를..