У меня есть объект, который сопоставляется с внешней таблицей Oracle, которая является одним из основных источников данных моего приложения. Эта сущность моделируется с использованием спящего режима.
Таблица оракула теперь имеет сложную функцию, которая вычисляет некоторые специальные значения. Мне нужно как-то вызвать эту функцию - почти как еще один метод доступа к сущности.
Что бы вы предложили, как лучший способ включить этот вызов функции, чтобы я мог поддерживать относительно нормальный доступ к объектам в спящем режиме?




Вы можете вызвать функцию напрямую, используя хранимую процедуру с HQL. Если, конечно, вам не придется вызывать эту функцию для каждой записи в таблице. Но если вы делаете это в одном и том же сеансе гибернации, если вы не выполняете много вызовов одновременно, это должно работать без значительного снижения производительности.
У меня есть решение, использующее аннотацию @Formula
Чтобы сохранить развязку с вашей базой данных, предоставляемую Hibernate, я бы положился на Oracle, чтобы вызвать эту функцию, используя триггеры или представления.
Основное преимущество этого подхода заключается в том, что он полностью безупречен для вашей реализации Hibernate.
как бы вы это сделали с функцией, требующей параметров?
Мне нужно вызывать его для каждой записи в таблице. Этот объект обрабатывается от начала до конца, поэтому было бы неплохо иметь способ поместить вызов функции как часть естественного чтения. Sql выглядит примерно так: SELECT FIELD1, FIELD2, FUNCTION (FIELD1) from DataTable