728x90

jpa 76

queryDsl 기본 조인에 대해

(querydsl) 조인 - 기본 조인 조인의 기본 문법은 첫 번째 파라미터에 조인 대상을 지정하고, 두 번째 파라미터에 별칭(alias)으로 사용할 Q 타입을 지정합니다. join(조인 대상, 별칭으로 사용할 Q타입) 예제 /** * 팀 A에 소속된 모든 회원 조회 */ @Test public void join() throws Exception { QMember member = QMember.member; QTeam team = QTeam.team; List result = queryFactory .selectFrom(member) .join(member.team, team) .where(team.name.eq("teamA")) .fetch(); assertThat(result) .extracting(..

JPA 2022.02.14

Q클래스 인스턴스 사용 방법 두가지

(JPA - Querydsl) Q클래스 인스턴스를 사용하는 방법에는 두 가지가 있습니다. QMember qMember = new QMember("m"); //별칭 직접 지정 (As-is) QMember qMember = QMember.member; //기본 인스턴스 사용 (To-be) 별칭 직접 지정 (As-is) 방법 @Test public void startQuerydsl2() { QMember m = new QMember("m"); Member findMember = queryFactory .select(m) .from(m) .where(m.username.eq("member1")) .fetchOne(); assertThat(findMember.getUsername()).isEqualTo("memb..

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

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

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

JPA 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