CQEngine可以查询另一个对象内的对象

时间:2016-06-11 17:55:56

标签: java cqengine

有没有人知道CQEngine是否可以在其他对象中查询对象?我希望能够查询用户,订单和产品。

可以使用CQEngine完成,还是需要展平对象?

public class User {
    public List<Orders> orders;
}

public class Orders {
    public List<Products> products; 
}

public class Products {
    public String name;
}

1 个答案:

答案 0 :(得分:3)

是的,您只需要定义一个CQEngine属性,该属性将从您要搜索的嵌套对象中返回值

例如,此属性将检索由特定用户放置的订单中包含的每个产品的名称。

<link href="https://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css" rel="stylesheet"/>
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>


<div id="img-wrapper">
    <div class="ui-resizable-handle ui-resizable-nw" id="nwgrip"></div>
    <div class="ui-resizable-handle ui-resizable-ne" id="negrip"></div>
    <div class="ui-resizable-handle ui-resizable-sw" id="swgrip"></div>
    <div class="ui-resizable-handle ui-resizable-se" id="segrip"></div>
    <div class="ui-resizable-handle ui-resizable-n" id="ngrip"></div>
    <div class="ui-resizable-handle ui-resizable-s" id="sgrip"></div>
    <div class="ui-resizable-handle ui-resizable-e" id="egrip"></div>
    <div class="ui-resizable-handle ui-resizable-w" id="wgrip"></div>
    <img src="https://placeholdit.imgix.net/~text?txtsize=33&txt=350%C3%97150&w=350&h=150">
</div>

您可以选择在此属性上添加索引,以加快查询。

以下是设置static final Attribute<User, String> PRODUCT_NAMES_ORDERED = new MultiValueAttribute<User, String>() { public Iterable<String> getValues(User user, QueryOptions queryOptions) { return user.orders.stream() .map(order -> order.products).flatMap(Collection::stream) .map(product -> product.name)::iterator; } }; 用户的示例,其中每个用户都有多个订单,每个订单都有多个产品。这些产品是您在电影院看到的小吃。它会搜索集合中订购“Snickers Bar”的用户。

IndexedCollection

BTW我是CQEngine的作者,你可以在CQEngine site找到这个例子的完整来源。 (我刚刚添加了这个作为新的例子!)