문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
|
java:querydsl [2015/01/15 12:21] kwon37xi |
java:querydsl [2023/12/06 13:44] (현재) kwon37xi [QueryDSL] |
||
|---|---|---|---|
| 줄 1: | 줄 1: | ||
| ====== QueryDSL ====== | ====== QueryDSL ====== | ||
| * http:// | * http:// | ||
| + | * [[java: | ||
| + | * [[java: | ||
| * [[http:// | * [[http:// | ||
| * Querydsl is a framework which enables the construction of type-safe SQL-like queries for multiple backends including JPA, JDO and SQL in Java. | * Querydsl is a framework which enables the construction of type-safe SQL-like queries for multiple backends including JPA, JDO and SQL in Java. | ||
| + | * [[java: | ||
| + | * [[https:// | ||
| + | |||
| + | ===== 프로젝트 이관 ===== | ||
| + | * 5.x 이후에 https:// | ||
| + | * 이로인해 '' | ||
| + | * https:// | ||
| + | |||
| + | ===== Q-Types multi thread loading 시 dead lock ===== | ||
| + | * [[http:// | ||
| + | <code java> | ||
| + | // 미리 초기화를 호출하는게 좋다. packageToLoad 를 변경해준다. | ||
| + | ClassPathUtils.scanPackage(Thread.currentThread().getContextClassLoader(), | ||
| + | </ | ||
| + | |||
| + | ===== join 성능 향상 ===== | ||
| + | * Join 시 그 결과로 나오는 관계 객체를 Eager Loading 하려면 '' | ||
| + | |||
| + | <code java> | ||
| + | from(parent).innerJoin(parent.child).fetch() | ||
| + | .... | ||
| + | </ | ||
| ===== JPA QueryDSL Cross Join 발생 ===== | ===== JPA QueryDSL Cross Join 발생 ===== | ||
| 줄 19: | 줄 43: | ||
| .where(parent.something.gt(child.somthing))....; | .where(parent.something.gt(child.somthing))....; | ||
| </ | </ | ||
| + | |||
| + | ===== JPA Subquery & JPAExpressions ===== | ||
| + | * JPA Subquery 는 '' | ||
| + | * SELECT 에서 사용할 때는 '' | ||
| ===== Native 조건 condition ===== | ===== Native 조건 condition ===== | ||
| * [[http:// | * [[http:// | ||
| + | * JPA 사용시에는 해당 함수가 [[java: | ||
| <code java> | <code java> | ||
| // MySQL의 TIMESTAMPDIFF를 Expression으로 만들기 | // MySQL의 TIMESTAMPDIFF를 Expression으로 만들기 | ||
| 줄 37: | 줄 66: | ||
| } | } | ||
| </ | </ | ||
| + | * [[https:// | ||
| ===== 상수가 들어가는 표현식 ===== | ===== 상수가 들어가는 표현식 ===== | ||
| 줄 62: | 줄 92: | ||
| return qry.list(customer); | return qry.list(customer); | ||
| } | } | ||
| + | </ | ||
| + | |||
| + | ===== Case/When ===== | ||
| + | * [[https:// | ||
| + | * '' | ||
| + | * '' | ||
| + | * 따라서, '' | ||
| + | |||
| + | <code java> | ||
| + | // registerDate 가 DATE 컬럼 일때 | ||
| + | // newRegisterDate 는 LocalDateTime.class | ||
| + | Expression< | ||
| + | .when(qUser.registerDate.eq(expectedRegisterDate)) | ||
| + | .then(qUser.registerDate) // DB 입장에서 DATE 컬럼 | ||
| + | .otherwise( | ||
| + | // DB 입장에서 DATE 인 ' | ||
| + | // 들어가기 때문에 어쩔 수 없이 문자로 모든 것을 넣어줌 | ||
| + | Expressions.dateTimeTemplate(LocalDateTime.class, | ||
| + | newDateTime.format(DateTimeFormatter.ofPattern(" | ||
| + | Expressions.constant(" | ||
| + | ); | ||
| + | </ | ||
| + | ===== @Embeddable의 필드 소스 생성 ===== | ||
| + | * Embeddable안에 또 다른 Embeddable이 있을 경우, 더 자식쪽 Embeddable의 경우 명시적 컬럼 매핑('' | ||
| + | * 버그로 보인다. | ||
| + | |||
| + | ==== Metamodel 생성 ==== | ||
| + | * [[gradle: | ||
| + | * [[gradle: | ||
| + | * Java 7에서 '' | ||
| + | Caused by: java.lang.NullPointerException | ||
| + | at com.mysema.query.codegen.SimpleSerializerConfig.getConfig(SimpleSerializerConfig.java: | ||
| + | at com.mysema.query.apt.DefaultConfiguration.< | ||
| + | at com.mysema.query.apt.jpa.JPAConfiguration.< | ||
| + | ... | ||
| </ | </ | ||
| 줄 70: | 줄 135: | ||
| * [[http:// | * [[http:// | ||
| * [[http:// | * [[http:// | ||
| + | * [[https:// | ||