1

我对使用 spring-data-jpa 1.2.0.RELEASE 的 querydsl 有疑问

我有包含一组促销的实体项目,每个促销都有促销类型,它是一个枚举。我正在尝试查找包含一组过滤促销的所有项目,其中 PromotionType == PromotionType.Special。我想我会通过一个子查询来实现这样的促销活动:

谓词:

public class ItemPredicates {
    private static QItem $ = QItem.item;

    public static BooleanExpression getSpecialItems() {
        return $.promotions.any().promotionType.eq(PromotionType.SPECIAL);
    }
}

Test:

//prepare data
Item item = new Item();
item.setPromotions(Sets.newHashSet(promotion(PromotionType.SPECIAL), promotion(PromotionType.NORMAL)));

//assertion
Item specialItems = itemRepository.findOne(ItemPredicates.getSpecialItems());

因此,我期望只有特殊类型的促销过滤掉促销的项目,而不是我总是得到一个有一组促销的项目。如果我将测试更改为此:

Test:

//prepare data
Item item = new Item();
item.setPromotions(Sets.newHashSet(promotion(Promo tionType.NORMAL)));

//assertion
Item specialItems = itemRepository.findOne(ItemPredicates.getSpecialItems());

然后我不会得到正确的项目。但是如何过滤促销集以仅具有特殊促销类型?

请问你能帮我一把吗?

4

0 回答 0