我正在尝试执行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 )
我一直在看文档,但是我对如何完善查询以符合我的需求并不明确。
任何人可以帮忙吗?
有一个查看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中放置或,在它们内部将和条件放在其中。