일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스프링부트 도커
- jpa no session
- kotlin 리팩터링
- 스프링 포매터
- Atomicity
- 동적파라미터
- kotlin ::
- ioc컨테이너
- spring formatter
- 그래프큐엘
- 도커 이미지 빌드
- jpa lazy
- 스프링시큐리티
- 비기능적 요구사항
- method refetence
- 스프링di
- 수정자주입
- 자바 필터
- fetch join
- 스프링 시큐리티 설정
- 스프링
- Spring
- 기능적 요구사항
- IOC
- open-session-in-view
- 정적팩토리메서드
- 생성자주입
- java predicate
- 토비의 스프링
- 소프트웨어의 품격
- Today
- Total
목록JPA (9)
공부기록
org.hibernate.dialect.MySQL5Dialectapplication-test.ymlspring: jpa: open-in-view: false hibernate: ddl-auto: create database-platform: org.hibernate.dialect.MySQL5Dialect상황 :지금까지 작성한 테스트를 모두 한 번에 실행할 때Caused by: javax.persistence.NonUniqueResultException: query did not return a unique result: 2같은 에러가 뜬다.문제점 :테스트 클래스 위에 @Transactinal 을 붙여서 테스트가 끝난 뒤 Rollback되기를 기대했지만 되지 않아서 NonUniq..
Open-In-View 또는 Open-Session-In-View 또는 Open-EntityManager-In-View 란? 관례상 OSIV 라고 한다. true일 경우 영속성 컨텍스트가 트랜잭션 범위를 넘어선 레이어까지 살아있다. Api라면 클라이언트에게 응답될 때까지, View라면 View가 렌더링될 때까지 영속성컨텍스트가 살아있다. false일 경우 트랜잭션을 종료할 때 영속성 컨텍스트 또한 닫힌다. 기본값은 true 이다 코드 간단히 코드로 false와 true일 때 어떤 차이가 있는지 살펴보자. Member.class /** * @author : Eunmo Hong * @since : 2020/06/30 */ @ToString(of = "name") @NoArgsConstructor(access..
@EntityGraph fetch join fetch가 LAZY로 되어있어도 연관된 객체를 즉시 조회한다. 위와 같이 Member -> Team 관계를 맺고 있을 때 fetch 옵션이 LAZY라면 Member 엔티티를 조회할 때, 연관된 Team 엔티티는 프록시 객체로 조회된다. 이때 셀렉트 쿼리는 Member만을 찾는 셀렉트쿼리 한번이 나가고, Member.getTeam().getName(); 같이 프록시 객체의 실제값을 호출할 때 그제서야 Team에 대한 쿼리도 나간다. 만약 Team이 두 개라면 N + 1문제가 터진다. 1은 Member, N(2)은 Team. 다음과 같이 fetch 조인으로 Member와 Team을 조인시켜 한방쿼리로 해결한다. @Query("select m from Member ..
순수 JPA레포지토리의 페이징과 스프링 데이터 JPA레포지토리의 페이징. 순수 JPA레포지토리 MemberJpaRepository.class public List findByPage(int age, int offset, int limit) { return em.createQuery("select m from Member as m" + " where m.age = :age" + " order by m.username asc", Member.class) .setParameter("age", age) .setFirstResult(offset) .setMaxResults(limit) .getResultList(); } MemberJpaRepositoryTest.class @Transactional @Test v..