我试图通过他/她的全名找到一个用户给出一些查询字符串。在我的表格中,我有#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有关吗?
答案 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();