2015-10-30 2 views
2

Я использую JPA с Hibernate и QueryDSL (v.4.0.5). У меня есть эта сущность:QueryDSL для получения любых объектов в коллекции другого объекта

package com.test.model.entity; 

@Entity 
public class Article { 
    @Id 
    private Long id; 

    @ManyToMany(fetch = LAZY, cascade = DETACH) 
    private Set<Tag> tags; 
} 

Как я могу найти все статьи, соответствующие заданный набор Tag с? Я думаю, что я должен начать следующим образом:

public BooleanExpression hasTag(Set<Tag> tags){ 
    final QArticle article = QArticle.article; 
    return article.tags.any().eqAny(ce); 
} 

где ce должен быть CollectionExpression. Ясно, что я понятия не имею, как установить это.

Любое решение?

+0

Вы попробуйте передать теги набор методу eqAny? – shazin

+0

@shazin метод контракта для 'eqAny' не принимает' Collection', но 'CollectionExpression' или' SubQueryExpression' –

ответ

4

ли вы попробовать

public BooleanExpression hasTag(Set<Tag> tags){ 
    QArticle article = QArticle.article; 
    return article.tags.any().in(tags); 
} 
+0

отлично! это становится истинным, если любой из тегов находится в указанном параметре тегов. Можно ли проверить, содержатся ли все теги в указанном параметре тегов? тэги - это подмножество тегов – dsharew