Im работает с внешней службой, которая отправляет POST на конечную точку в моем приложении, где у меня есть @RequestBody CalloutRequest calloutRequest
, где я сопоставляю тело запроса с классом CalloutRequest
.Создайте JPQL на BLOB с данными Spring. JPA
В рамках этого CalloutRequest это поле называется userAttributes
, который выглядит, как это в моем классе:
@Lob
private HashMap<String, List<String>> userAttributes;
Я его аннотированный остроумие @Lob
, потому что у меня нет класса, который я могу сопоставить его из-за его довольно сложный характер. Поэтому это HashMap. Пример того, что userAttributes выглядит следующим образом, когда в формате JSON:
"userAttributes": {
"lastName": [
"Guy"
],
"ExternalId": [
"d9a59407-2bca-46aa-8641-3350fd95bcd1"
],
"distinguishedName": [
"CN=t2-contractor9,DC=company,DC=com"
],
"employeeID": [],
"userName": [
"[email protected]"
],
"groupNames": [
"ALL USERS",
"[email protected]"
],
"firstName": [
"T2-Contractor"
],
"UserStore": [],
"phone": [],
"domain": [
"company.com"
],
"disabled": [
"false"
],
"email": [
"[email protected]"
]
}
Моя задача состоит в том, что я хотел бы создать запрос для конкретного пользователя - userAttributes.userName
- но, учитывая тот факт, что это хранится в виде двоичных объектов I не может понять, как - или, если это вообще возможно - написать такой запрос.
Прямо сейчас я просто использую Spring Data JPA и это реализация репозитория, но мне интересно, можно ли это сделать с помощью настраиваемого @Query
или, возможно, с помощью querydsl?
Я правильно понимаю, что если бы я мог найти способ сопоставить вышеуказанный HashMap с фактическим классом, который мог бы использовать для сериализации/де-сериализации и иметь сопоставление между CalloutRequest и этим новым классом, я мог бы построить JPQL-запрос, который будет использовать соединение для достижения того, что мне нужно?
Это похоже на работу очень хорошо! Я могу реализовать объект с помощью '@ ElementCollection' и' @ Convert'. Однако я не могу получить запрос на работу, скорее всего, потому что я не полностью понимаю, что на самом деле делает 'StringListToStringConverter'. Я думал, что могу просто передать String для i.e.ername в метод запроса, но это не удается: «Значение параметра не соответствует ожидаемому типу [java.util.List] "- что именно мне нужно предоставить, чтобы конвертер мог понять мой метод? –
Прошу прощения, я не тестировал это, поэтому, возможно, вам придется подстроить запрос как« WHERE VALUE (a) IN (: mapValues) 'и указать именованный параметр как' Список '? –
Naros
Это дает мне: ' java.lang.ClassCastException: java.lang.String не может быть переведен в java.util.List' из метода 'convertToDatabaseColumn'. My '@ Query' аннотированный метод выглядит в моем хранилище: ' CalloutRequest findWhereUser (@param ("Username") Список Username); ' –