Вы должны создать статический заводский метод, который принимает один аргумент и аннотирует его с помощью @JsonCreator
(доступно с Jackson 1.2)
@JsonCreator
public static Event forValue(String value) { ... }
Подробнее о аннотации JsonCreator здесь .
Следующее выражение должно возвращать ожидаемые результаты:
CONCAT(
store_cat.name,
IFNULL(
CONCAT(
' (',
GROUP_CONCAT(
store_cat_attribute.name
ORDER BY store_cat_attribute.position
SEPARATOR ', '
),
')'
),
''
)
) AS name
По сути, это просто пытается GROUP_CONCAT()
атрибуты, и если результат равен NULL
, то он превращает список атрибутов пустая строка. Обратите внимание, что GROUP_CONCAT
поддерживает ORDER BY
.
Я также исправил предложение GROUP BY
: в не древних версиях MySQL все неагрегированные столбцы должны появляться в предложении where (у вас нет store_cat.name
).
Демонстрация DB Fiddle с вашими примерами данных:
SELECT
store_cat.id_cat AS id,
CONCAT(
store_cat.name,
IFNULL(
CONCAT(
' (',
GROUP_CONCAT(store_cat_attribute.name ORDER BY store_cat_attribute.position SEPARATOR ', '),
')'
),
''
)
) AS name,
COUNT(store_item.id_item) AS products,
store_cat.flg_public AS flg_public
FROM
store_cat
LEFT JOIN store_item ON store_item.id_cat = store_cat.id_cat
LEFT JOIN store_cat_attribute ON store_cat_attribute.id_cat = store_cat.id_cat
WHERE store_cat.id_store = 1
GROUP BY store_cat.id_cat, store_cat.name
ORDER BY name;
| id | flg_public | name | products | | --- | ---------- | --------------------- | -------- | | 3 | 1 | Comidas | 0 | | 2 | 1 | Correas (S, M, L, XL) | 4 | | 1 | 1 | Juguetes | 2 | | 4 | | Medicinas | 0 |