스프링 관련63 spring JpaAuditing JpaAuditing은 엔티티에서 공통으로 사용하는 칼럼을 재활용 하여 중복을 제거하기 위해 사용하는 설정 (대표적으로 시간 칼럼) 크게 아래 3가지 설정만 하면 된다. @EnableJpaAuditing @Configuration public class JpaConfig { } public class PackageEntity extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer packageSeq; private String packageName; private Integer count; private Integer period; } @MappedSuperclass @EntityListener.. 2022. 11. 6. h2 inmemory db 설정 위한 정보 build.gradle runtimeOnly 'com.h2database:h2:1.4.199' application.yml spring: h2: console: enabled: true path: /h2-console datasource: url: jdbc:h2:mem:mydb username: sa password: driver-class-name: org.h2.Driver 2022. 11. 6. @Transactional 동작 원리 간략 설명 스프링에서는 @Transactional 어노테이션을 사용하면, 아래 이미지처럼 어노테이션이 붙은 클래스를 래핑한 클래스를 만들어서 실행하게 된다. (래핑한 클래스에는 해당 메서드 트랜잭션으로 처리하기 위한 로직이 들어가는 듯 하다.) @Transactional synchronized public void decrease(Long id, Long quantity){ Stock stock = stockRepository.findById(id).orElseThrow(); stock.decrease(quantity); stockRepository.saveAndFlush(stock); } 2022. 9. 13. API 만들 때 생길 수 있는 문제 (컬렉션 조회 최적화) public List findAllWithItem() { return em.createQuery( // JPA에서만의 기능으로 전체 row를 보는 것이 아닌 Order 엔티티만 봐서 중복 제거해서 보여준다. "select distinct o from Order o" + " join fetch o.member m" + " join fetch o.delivery d" + " join fetch o.orderItems oi" + " join fetch oi.item i", Order.class ).getResultList(); } 컬렉션 페치 조인을 사용하면 페이징이 불가능하다. 컬렉션 페치 조인은 1개만 사용할 수 있다. 컬렉션 조회 시 N + 1 문제 발생 해결 방법 1. 제약이 있는 fetch join .. 2022. 8. 28. 이전 1 ··· 6 7 8 9 10 11 12 ··· 16 다음