Java / Ebean和Or查询

时间:2015-05-10 10:35:33

标签: java playframework-2.0 ebean

我尝试执行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 ) 

我一直在查看文档,但我没有清楚了解如何优化查询以满足我的需求。

有人可以帮忙吗?

1 个答案:

答案 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和条件之间。