2014-02-28 24 views
2

我有以下QueryDSL查詢:自動在QueryDSL微調與豆投影

List<DTOPerson> names = query.from(p) 
    .where(p.lastname.like("%smith%")) 
    .orderBy(p.lastname.asc(), p.firstname.asc()) 
    .list(Projections.bean(DTOPerson.class, p.lastname, p.firstname)); 

我想有是這樣的:

List<DTOPerson> names = query.from(p) 
    .where(p.lastname.like("%smith%")) 
    .orderBy(p.lastname.asc(), p.firstname.asc()) 
    .list(Projections.bean(DTOPerson.class, p.lastname.trim(), p.firstname.trim())); 

但是,當我這樣做,QueryDSL給我這個錯誤:

java.lang.IllegalArgumentException: Unsupported expression trim(p.lastname) 
    at com.mysema.query.types.QBean.createBindings(QBean.java:59) 
    at com.mysema.query.types.QBean.<init>(QBean.java:149) 
    at com.mysema.query.types.QBean.<init>(QBean.java:138) 
    at com.mysema.query.types.Projections.bean(Projections.java:51)  

有沒有辦法修剪(所有)字符串結果?

回答

3

在這種情況下,您需要使用顯式別名,因爲Querydsl只接受路徑和別名操作作爲QBean的參數。

List<DTOPerson> names = query.from(p) 
    .where(p.lastname.like("%smith%")) 
    .orderBy(p.lastname.asc(), p.firstname.asc()) 
    .list(Projections.bean(DTOPerson.class, 
     p.lastname.trim().as("lastname"), 
     p.firstname.trim().as("firstname"))); 

Is there a way to trim (all) string results?

您可以創建自定義FactoryExpression,例如QBean的子類,要做到這一點。