У меня есть требование использовать удобный для отчетов запрос из HQL.То есть каждый столбец представлен стандартным типом Java (Long, Integer, String, List), а не сопоставленным классом.Значения будут использоваться сторонней библиотекой, поэтому у меня очень ограниченный контроль над постобработкой.
Мой пример дерева объектов выглядит следующим образом:
a.x
a.y (a collection of z)
a.y.z[0].v
a.y.z[1].v
a.y.z[2].v
Я бы хотел запроситьполучить два столбца.Первый столбец - это простое поле «топор», а второй - строка списка всех значений ayzv, разделенных запятыми.Если это невозможно, то удовлетворительное возвращение второго столбца в виде списка значений ayzv в Java.
Короче говоря, я бы хотел свести коллекцию ayzv в строку csv илиобъект List изнутри запроса.
Я уже пытался сделать следующее:
Использование ключевого слова "new" в подвыборке списка.то есть, "выбрать топор, (выбрать новый список (ayzv)) из".При необходимости я мог бы преобразовать содержимое списка в csv, но это вызвало синтаксическую ошибку.
Использование ключевого слова "new" с пользовательским объектом в подвыборке.то есть, «выбрать топор, (выбрать новый custom.package.ListToCsvObject (ayz)) из a».Это вызвало ту же ошибку, что и первая попытка
Использование ключевого слова elements () в select.К сожалению, кажется, что это ключевое слово работает только внутри предложений "in", "exist" (и т. Д.), А не как фактическое возвращаемое значение.
Единственное решение, которое нам удалось найтидолжен был создать хранимую процедуру в базе данных и использовать ее, но такое решение мучительно медленное через HQL (оно превращает запрос в секунду за 30-секундный запрос) и поэтому мы не хотим продолжать это делать.
Я * могу внести некоторые ограниченные изменения в отображение Hibernate (поэтому я могу добавить @formula и т. Д.), Но я бы предпочел не вносить существенных изменений в схему базы данных для ее поддержки,(Так что нет, я не хочу создавать денормализованный столбец «csv_value» в базе данных!)
Может ли кто-нибудь предложить какой-нибудь код или, в случае неудачи, альтернативный подход к решению этой проблемы?