사용자 도구

사이트 도구


java:querydsl:nativesql

문서의 이전 판입니다!


QueryDSL Native SQL

SQL 생성시 schema(catalog) 이름도 함께 출력

  • 아래와 같이 printSchema() 를 지정해야만 schema.tableName 형태로 SQL 생성
    SQLTemplates mysqlTemplates = MySQLTemplates.builder().printSchema().build();
  • 단, MySQL의 경우 schema 개념이 없어서 코드 생성시 코드 값이 올바로 안들어간다. 따라서 Meta Class 생성시 schema name이 null로 생성된다. 아래와 같이 하면 schema 지정이 가능해진다.
    QUser qUser = 
      new QUser("user_alias", "user_schema_name", "user_table_name");

JPASQLQuery 에서 native query 추가

  • MySQLQuery 같은 순수 Native SQL 용 Query 클래스를 참조하여 addFlag,addJoinFlag 등을 작성해주면 된다. 혹은 JPASQLQuery를 상속하여 addFlag,addJoinFlag 등을 미리 구현해 둔 클래스를 만들어 사용하는 것도 방법이다.
// MySQLQuery와 JPASQLQuery 를 참조해서 만든 MySQLJPASQLQuery
public class MySQLJPASQLQuery extends AbstractJPASQLQuery<MySQLJPASQLQuery> {
    private static final Joiner JOINER = Joiner.on(", ");
 
    public MySQLJPASQLQuery(EntityManager entityManager, SQLTemplates sqlTemplates) {
        super(entityManager, new Configuration(sqlTemplates));
    }
 
    public MySQLJPASQLQuery forceIndex(String... indexes) {
        addJoinFlag(" force index (" + JOINER.join(indexes) + ")", JoinFlag.Position.END);
        return this;
    }
 
    public MySQLJPASQLQuery ignoreIndex(String... indexes) {
        addJoinFlag(" ignore index (" + JOINER.join(indexes) + ")", JoinFlag.Position.END);
        return this;
    }
 
    public MySQLJPASQLQuery useIndex(String... indexes) {
        addJoinFlag(" use index (" + JOINER.join(indexes) + ")", JoinFlag.Position.END);
        return this;
    }
 
    @Override
        public MySQLJPASQLQuery clone(EntityManager entityManager) {
            MySQLJPASQLQuery q = new MySQLJPASQLQuery(entityManager, configuration, queryHandler, getMetadata().clone());
            q.clone(this);
            return q;
        }
}
java/querydsl/nativesql.1513589235.txt.gz · 마지막으로 수정됨: 2017/12/18 17:57 저자 kwon37xi