如何连接Ebean中的两列像句子一样

时间:2014-07-07 17:01:18

标签: sql ebean

我试图通过他/她的全名找到一个用户给出一些查询字符串。在我的表格中,我有#34; First_Name"和" Last_Name",但没有" Full_Name"的列。

使用Avaje Ebean,我想查询一个like子句来连接" First_Name"和" Last_Name"然后将其与n%(查询中的名称)进行比较。在SQL中,查询类似于:

SELECT * FROM users
WHERE
concat(users.First_Name , ' ' , users.Last_Name) LIKE 'n%'
OR  users.First_Name LIKE 'n%' OR  users.First_Name LIKE '%n'
OR  users.Last_Name LIKE 'n%'  OR users.Last_Name LIKE '%n' 

这可能与Ebean有关吗?

1 个答案:

答案 0 :(得分:1)

是的,可以RawSql

我允许您为给定的查询使用自己的SQL语句。

doc

中的示例
// Use raw SQL with an aggregate function  

String sql   
    = " select order_id, o.status, c.id, c.name, sum(d.order_qty*d.unit_price) as totalAmount"  
    + " from o_order o"   
    + " join o_customer c on c.id = o.kcustomer_id "  
    + " join o_order_detail d on d.order_id = o.id "  
    + " group by order_id, o.status ";  

RawSql rawSql =   
    RawSqlBuilder  
        // let ebean parse the SQL so that it can  
        // add expressions to the WHERE and HAVING   
        // clauses  
        .parse(sql)  
        // map resultSet columns to bean properties  
        .columnMapping("order_id",  "order.id")  
        .columnMapping("o.status",  "order.status")  
        .columnMapping("c.id",      "order.customer.id")  
        .columnMapping("c.name",    "order.customer.name")  
        .create();  


Query<OrderAggregate> query = Ebean.find(OrderAggregate.class);  
    query.setRawSql(rawSql)          
    // add expressions to the WHERE and HAVING clauses  
    .where().gt("order.id", 0)  
    .having().gt("totalAmount", 20);  

List<OrderAggregate> list = query.findList();  

编辑:我刚刚检查过我的好奇心,也有效(至少在Play框架中):

Ebean.find(MyModel.class).where().like("concat(subject, ' ' , body)", "%foo%").findList();