формула свойства hibernate, как получить более 1 строки? - PullRequest
1 голос
/ 28 октября 2009

В файле отображения hibernate я использую формулу свойства, чтобы получить любое значение.

<property name="price" type="double" formula="(select SUM(amount) ...) />

Но это позволяет получить только 1 строку. Как я могу получить список строк? Я понимаю, что "свойство" не подходит, но невозможно добавить формулу, чтобы установить или список.

Конечно, я просто хочу получить значения без добавления новых классов. У меня просто запрос sql и я ожидаю получить список или установить для существующего класса.

Ответы [ 3 ]

1 голос
/ 02 декабря 2010

Если ваша формула возвращает более одной строки, вам необходимо связать инструкцию с идентификатором сущности, например:

выберите имя столбца
от стол где таблица .identifier = entity_identifier

Что касается применения этого к набору значений, может быть применима группа по функции. Я однажды использовал group_concat из mysql, например, чтобы показать список значений. Плохо то, что эта формула была связана с родным диалектом mysql, но она работала.

1 голос
/ 28 октября 2009

Свойства формулы работают только с текущей строкой. Если вы хотите выполнять агрегатные функции, вам нужно написать специальный запрос для их извлечения. См. раздел документов гибернации, которые обрабатывают агрегатные функции .

0 голосов
/ 28 октября 2009

Формулы применяются только к однозначным свойствам; не в коллекции. Однако вы можете указать пользовательский оператор SQL, который будет использоваться для загрузки коллекции .

Сложность в том, что из вашего вопроса звучит так, будто вы хотите получить набор элементов (double цена), а не сущностей; Я никогда не пытался указать пользовательский загрузчик за что-то подобное, и поэтому я не уверен, будет ли это работать. В документации по этому вопросу ничего не говорится.

Если вышеприведенное не работает, другой вариант - определить SELECT как представление и сопоставить коллекцию таким образом (опять же, как набор элементов).

Наконец, вы также можете выполнить запрос, подобный предложенному skaffman. Вам нужно будет вызвать этот запрос и заполнить коллекцию в вашей сущности вручную, когда это необходимо (например, в вашей DAO после загрузки сущности), или вы можете определить соответствующий прослушиватель и сделать это там.

...