FlexibleSearch с использованием enum в предложении WHERE - PullRequest
1 голос
/ 02 апреля 2020

Я работаю с Hybris и пытаюсь запросить все продукты, которые имеют статус подтверждения APPROVED в коде Java. Это должно выглядеть как показано ниже, но я не могу заставить его работать ни в HA C, ни в 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());

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

Попробуйте обернуть атрибуты {} следующим образом:

SELECT {p:pk} FROM {Product as p join EnumerationValue as enum on {enum.pk} = {p.approvalStatus} } WHERE {enum:code[en]} = 'APPROVED'
1 голос
/ 02 апреля 2020

Вам необходимо использовать тип перечисления. Кроме того, код перечисления чувствителен к регистру; это зависит от того, что определено в элементах. xml.

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