Hybris 使用WHERE子句中的枚举进行FlexibleSearch

Hybris 使用WHERE子句中的枚举进行FlexibleSearch,hybris,Hybris,我正在与Hybris合作,试图在Java代码中查询所有审批状态为APPROVED的产品。它应该如下所示,但我无法让它在HAC或Java代码中工作 正确的方法是什么 SELECT {p:pk} FROM {Product as p join EnumerationValue as enum on enum.pk = p.approvalStatus } WHERE {enum:code[en]} = 'APPROVED' 谢谢大家,这是最后的答案,请看其他回复中的评论,了解更多我的问题,希望有

我正在与Hybris合作,试图在Java代码中查询所有审批状态为APPROVED的产品。它应该如下所示,但我无法让它在HAC或Java代码中工作

正确的方法是什么

SELECT {p:pk} FROM {Product as p join EnumerationValue as enum on enum.pk = p.approvalStatus } WHERE {enum:code[en]} = 'APPROVED'

谢谢大家,这是最后的答案,请看其他回复中的评论,了解更多我的问题,希望有一些非常明智的回复:

        final StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("SELECT {p:").append(ProductModel.PK).append("} ");
        stringBuilder.append("FROM {").append(ProductModel._TYPECODE).append(" as p join ")
                .append(ArticleApprovalStatus._TYPECODE).append(" as enum on {enum.pk} = {p.").append(ProductModel.APPROVALSTATUS).append("} join ")
                .append(CatalogVersionModel._TYPECODE).append(" as cv on {cv.pk} = {p.").append(ProductModel.CATALOGVERSION).append("} } ");
        stringBuilder.append("WHERE ( {enum:code} = ?approvalStatus1 or {enum:code} = ?approvalStatus2} and {cv:")
                .append(CatalogVersionModel.VERSION)
                .append("} = ?version");

        final String unapprovedString = ArticleApprovalStatus.UNAPPROVED.toString().toLowerCase();
        params.put("approvalStatus1", unapprovedString);
        params.put("approvalStatus2", ArticleApprovalStatus.UNAPPROVED.toString().toLowerCase());

您需要使用枚举的类型。此外,枚举代码区分大小写;它取决于items.xml中定义的内容

SELECT * FROM {Product 
JOIN ArticleApprovalStatus ON {Product.approvalStatus} = {ArticleApprovalStatus.pk}}
WHERE {ArticleApprovalStatus.code} = 'approved'

尝试用{}包装属性,如下所示:

SELECT {p:pk} FROM {Product as p join EnumerationValue as enum on {enum.pk} = {p.approvalStatus} } WHERE {enum:code[en]} = 'APPROVED'

谢谢,这就是解决办法。我最初错过的一件事是,你说它是区分大小写的。正如您从我的最终工作解决方案中所看到的,我不太喜欢使用硬编码字符串,而是从正确的代码中提取它们。我不喜欢的是如何将未经批准的文件转换为小写。是否有更好的方法来获取正确的小写值?@Riley使用ArticleApprovalStatus.UNAPPROVED.getCode(),以便始终获得正确的代码值。此外,如果这个答案对你有帮助,请投票:谢谢,我对where条款有个问题。我艰难地发现,这不是“批准”,而是“批准”。在枚举上使用语言修饰符可以解决我遇到的区分大小写的问题吗?您可以尝试用lower()这样包装这两个变量:lower({alias:property})