Java / Ebean And Or Query



我正在尝试执行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中放置,在它们内部将条件放在其中。

最新更新