2016-03-05 31 views
0

如何將下面的sql轉換爲Querydsl的代碼?如何將下面的sql轉換爲Querydsl代碼?(querydsl oracle分層查詢,level,lpad)

(querydsl甲骨文分層查詢,水平,LPAD)

select lpad(' ',(level-1)*2,' ') || ename, sal, deptno 
    from emp 
start with ename = 'KING' 
connect by prior empno = mgr 

結果:

KING 5000 10 
    JONES 2975 20 
    SCOTT 3000 20 
     ADAMS 1100 20 
    FORD 3000 20 
     SMITH 800  20 
    BLAKE 2850 30 
    ALLEN 1600 30 
    WARD 1250 30 
    MARTIN 1250 30 
    TURNER 1500 30 
    JAMES 950  30 
    CLARK 2450 10 
+0

START ... CONNECT BY是Oracle歷史悠久的分層查詢語法,最終標準化的SQL提出了一個機制做同樣的遞歸WITH子句。 QueryDSL支持[遞歸的WITH子句](https://github.com/querydsl/querydsl/issues/844)。 – APC

+0

請參閱http://www.stackoverflow.com/help/mcve –

回答

0

據支持,看到com.querydsl.sql.oracle.OracleQueryhttp://www.querydsl.com/static/querydsl/4.0.7/apidocs/com/querydsl/sql/oracle/OracleQuery.html

import com.querydsl.sql.oracle.OracleGrammar; 
import com.querydsl.sql.oracle.OracleQuery; 
import com.querydsl.core.types.dsl.* 
//... 
OracleQuery query = new OracleQuery(getConnection(), config); 
query.select(StringExpressions.lpad(
    Expressions.stringTemplate("' '").stringValue(), 
    OracleGrammar.level.subtract(1).multiply(2), ' ')  
    .concat(emp.ename), 
    emp.sal, emp.deptno) 
.startWith(emp.ename.eq("KING")) 
.connectBy(emp.empno.eq(emp.mgr))  
.from(emp);