728x90

전체 글 331

JPAQueryFactory를 필드에서 제공하자(feat. 동시성 문제는 스프링이 해결)

(Java JPA) JPAQueryFactory를 필드로 제공할 때, 동시성 문제 (As-is) → 기존 JPAQueryFactory를 메소드 안에 생성한 버전 @SpringBootTest @Transactional public class QuerydslBasicTest { @PersistenceContext EntityManager em; @Test public void startQuerydsl() { JPAQueryFactory queryFactory = new JPAQueryFactory(em); //JPAQueryFactory를 메소드 안에 생성 QMember m = new QMember("m"); Member findMember = queryFactory .select(m) .from(m) .w..

JPA 2022.02.14

JPQL과 QueryDSL의 차이

JPQL과 Querydsl의 정의 JPQL(Java Persistence Query Language) JPA에서 제공하는 메서드 호출만으로 섬세한 쿼리 작성이 어려워서 생겨났습니다. JPA는 JPQL을 분석하여 SQL을 생성한 후 DB에서 조회합니다. Querydsl SQL을 java로 type-safe하게 개발 할 수 있게 해주는 프레임워크 Querydsl -> JPQL -> SQL 와 같이 동작 JPQL을 편하게 사용할 수 있게 도와주는 빌더의 역할 @SpringBootTest @Transactional public class QuerydslBasicTest { @Autowired EntityManager em; JPAQueryFactory queryFactory; @BeforeEach //클래스에 ..

JPA 2022.02.14

쿼리 힌트란? (feat. 예제)

JPA Hint SQL 힌트가 아니라 JPA 구현체에게 제공하는 힌트 Hint를 사용하여 영속성 컨텍스트에 저장되는 것을 방지해 메모리 낭비를 막고 혹시 모를 변경사항에 대해 업데이트되지 않도록 할 수 있습니다. 쿼리 힌트 사용 예 @QueryHints(value = @QueryHint(name = "org.hibernate.readOnly", value = "true")) Member findReadOnlyByUsername(String username); 쿼리 힌트 사용 확인 (read only 속성 때문에 업데이트가 실행이 안됨) @Test @Transactional public void queryHint() throws Exception { //given memberRepository.save(n..

JPA 2022.02.14

스트림의 기본 및 간단한 특징

(Java 8이상)스트림(Stream) 이란? 다양한 데이터 소스를 표준화된 방법으로 다루기 위한 것이다. 스트림이 제공하는 기능 - 중간 연산과 최종 연산 중간 연산 - 연산결과가 스트림인 연산. 반복적으로 적용 가능하다. 최종 연산 - 연산결과가 스트림이 아닌 연산. 스트림의 요소를 소모하므로 한번만 적용가능하다. 스트림의 구조 스트림의 특징 스트림은 데이터 소스로부터 데이터를 읽기만할 뿐 변경하지 않는다. 스트림은 Iterator처럼 일회용이다. 최종 연산 전까지 중간연산이 수행되지 않는다. - 지연된 연산 List list = Arrays.asList(4, 2, 5, 1, 3); List sortedList = list.stream().sorted() .collect(Collectors.toLis..

JAVA 2022.02.14

JPA Auditing으로 생성시간/수정시간 자동화하기

보통 Entity는 해당 데이터의 생성시간과 수정시간을 포함하고 있다. 이런 정보는 추후 유지보수에 있어 굉장히 중요한 정보이기 때문이다. 이렇다 보니 DB에 삽입 및 갱신할 때는 날짜 데이터를 등록/수정하는 코드가 항상 들어가게 된다. //Ex. 생성일 추가 public void savePosts() { ... posts.setCreateDate(new LocalDate()); postsRepository.save(posts); ... } 하지만 이런 코드가 모든 테이블과 서비스 메소드에 구현해야 한다면 중복이 발생하고 코드가 지저분지게 된다. 이런 문제를 해결하고자 나타난 것이 JPA Auditing이다. CreateModifyTimeEntity(BaseTimeEntity) @EntityListene..

JPA 2022.02.14

람다 함수(with 메서드 참조)

람다식이 하나의 메서드만 호출하는 경우에는 메서드 참조(method reference)라는 방법으로 람다식을 간략히 할 수 있다. //예1) static 메서드 참조 (기존) Function f = (String s) -> Integer.parseInt(s); //람다식 (변경) Function f2 = Integer::parseInt; //메서드 참조 //예2) 인스턴스 메서드 참조 (기존) BiFunction f = (s1, s2) -> s1.equals(s2); //람다식 (변경) BiFunction f2 = String::equals; //메서드 참조 //예3) 특정 객체 인스턴스 메서드 참조 MyClass obj = new MyClass(); (기존)Function f = (x) -> obj.e..

JAVA 2022.02.14

JPA 로그에서 파라미터 값 보는 방법에 대한 연구

hibernate가 제공하는 방법 ← 현재 주다타운(moon-app-api)에서 로그백을 사용하고 있으므로 이 방법이 적합함 org.hibernate.type의 로그 레벨을 trace로 잡으면 됩니다. 그런데 먼저 로그라이브러리를 설정해야 해서 좀 일이 있습니다. pom.xml에 다음을 추가해줍니다. ch.qos.logback logback-classic 1.2.3 2. resources 아래에 logback.xml 파일을 만들어서 둡니다. 여기에 잘 보시면 org.hibernate.type이 trace로 설정되어 있습니다. %d{HH:mm} %-5level %logger{36} - %msg%n 3.그리고 실행하면 다음과 같은 추가로그를 볼 수 있습니다. /* insert hellojpa.Member *..

JPA 2022.02.14
728x90