SQLQueryFactory
로 쿼리 생성을 시작하는데 실제로는 [DBType]SQLQueryFactory 를 사용해야 각 DB별 특수 문법을 사용할 수 있다. printSchema()
를 지정해야만 schema.tableName
형태로 SQL 생성SQLTemplates mysqlTemplates = MySQLTemplates.builder().printSchema().build();
schema
개념이 없어서 코드 생성시 코드 값이 올바로 안들어간다. 따라서 Meta Class 생성시 schema name이 null로 생성된다. 아래와 같이 하면 schema 지정이 가능해진다.QUser qUser = new QUser("user_alias", "user_schema_name", "user_table_name");
XXXSQLQuery
클래스를 확장하여 각 DB만의 특수 문법을 추가하는 것이 가능하다.MySQLQuery
같은 순수 Native SQL 용 Query 클래스를 참조하여 addFlag,addJoinFlag
등을 작성해주면 된다. 혹은 JPASQLQuery
를 상속하여 addFlag,addJoinFlag
등을 미리 구현해 둔 클래스를 만들어 사용하는 것도 방법이다.SQLSerializer
를 수정하여 테이블 앞에 'catalog'.'dbo'.'tablename' 으로 붙여주면 된다.SQLSerializer
는 AbstractSQLClause
와 AbstractSQLQuery
에서 생성된다.createSerializer
메소드를 오버라이드 하여 원하는 대로 수정한 SQLSerializer
를 생성해주면 된다.com.querydsl.sql.SQLTemplates#requiresQuotes
를 override 해서 schema 가 catalogname.dbo
이런식이면 false
를 반환해도 될 것 같다. : SQLTemplates 의 DB전용 버전을 하나만 override 하면 되기 때문에 이게 제일 좋은 방법인 듯 하다.