В настоящее время я пытаюсь создать довольно сложную настройку запроса с критериями api, и я достиг точки, когда начал думать, что это невозможно сделать с помощью API критериев.
У нас есть объект, имеющий ссылку на таблицу карт атрибутов.
client
____________
|id|...|...|
|--|---|---|
|__|___|___|
client-attributes
_____________________
|clientid|name|value|
|--------|----|-----|
|________|____|_____|
таблица атрибутов клиента отображается в сущности как таблица сбора:
@ElementCollection
@MapKeyColumn(name="NAME")
@Column(name="VALUE", length = 4000)
@CollectionTable(name="CLIENT_ATTRIBUTES", joinColumns={ @JoinColumn(name="CLIENT_ID") })
protected Map<String, String> attributes = new HashMap<String, String>();
этот код не наш, нам просто нужно с этим работать, и мы не можем вносить в него какие-либо изменения ...
Теперь я хочу построить запрос, подобный следующему, который может иметь произвольное количество дополнительных левых соединений после
SELECT *
from (SELECT *
from keycloak.USER_ENTITY U
LEFT JOIN (SELECT * from keycloak.USER_ATTRIBUTE attr where attr.NAME = 'attribute1')
as attribute1 on attribute1.USER_ID = U.ID
LEFT JOIN (SELECT * from keycloak.USER_ATTRIBUTE attr where attr.NAME = 'attribute2') as attribute2
on attribute2.USER_ID = U.ID) as U;
Кто-нибудь знает, как я могу строить такие запросы с критериями API?