我尝试执行sql查询:
select * from conversations where (user_1 = user_1_id and user_2 = user_2_id ) or (user_1 = user_2_id and user_2 = user_1_id )
我是这样在Ebean中写的:
Conversation conversation = Ebean.find(Conversation.class)
.where()
.and(Expr.eq("user_1", user_1_id), Expr.eq("user_2", user_2_id))
.or(Expr.eq("user_1", user_2_id), Expr.eq("user_2", user_1_id))
.findUnique();
然而,这提供了以下查询:
select * from conversation where (user_1 = user_1_id and user_2 = user_2_id ) and (user_1 = user_2_id or user_2 = user_1_id )
我一直在查看文档,但我没有清楚了解如何优化查询以满足我的需求。
有人可以帮忙吗?
答案 0 :(得分:0)
查看JavaDoc(以或表达式为例):
// Example: Using an Expr.or() method
Query<Order> query = Ebean.createQuery(Order.class);
query.where(
Expr.or(Expr.eq("status", Order.NEW),
Expr.gt("orderDate", lastWeek));
List<Order> list = query.findList();
这可能会让我更容易理解为什么这段代码:
.or(Expr.eq("user_1", user_2_id), Expr.eq("user_2", user_1_id))
结果:
(user_1 = user_2_id或user_2 = user_1_id)
你可以这么说,使用或表达式 你的第二个条件,而不是 这两个条件。
您需要先放置or
方法:
Conversation conversation = Ebean.find(Conversation.class)
.where().or(
Expr.and(Expr.eq("user_1", user_1_id), Expr.eq("user_2", user_2_id)),
Expr.and(Expr.eq("user_1", user_2_id), Expr.eq("user_2", user_1_id)))
.findUnique();
这应该将或放在你的paranthesises和和条件之间。