У нас есть несколько объектов с кучей свойств, аннотированных аннотацией Hibernate @Formula
. Фрагменты SQL в аннотации в основном выполняют скалярные подзапросы (например, COUNT
запросов). В качестве примера у нас есть иерархия отношений «один ко многим», которая имеет четыре уровня: A <- B <- C <- D
(где <-
обозначает связь «один-ко-многим»). Довольно часто при получении объекта типа A
мы хотели бы знать количество связанных объектов типа D
. Для этого мы используем @Formula
-необходимое свойство в A
.Управление ленивой/нетерпеливой загрузкой столбцов @Formula динамически
Поскольку мы не нуждаемся в этих значениях каждый раз, мы объявили свойства @Formula
ленивыми (мы включили поддержку байт-кода Hibernate, чтобы сделать это возможным). Но для некоторых запросов мы хотели бы загрузить эти свойства с нетерпением. Мы часто загружаем сотни объектов типа A
в одном запросе, и было бы важно, чтобы управлять динамической загрузкой этих свойств с нетерпением/ленивом. Мы уже используем графики сущностей JPA, чтобы контролировать, какие свойства загружаются с нетерпением для определенных запросов, но диаграммы сущностей, похоже, не работают здесь. Даже если мы перечислим свойства @Formula
в графе сущности, они все еще загружаются лениво.
Возможно ли контролировать динамическую загрузку столбцов в @Formula
столбцами за каждый запрос? В настоящее время мы ограничены API запросов к критериям JPA, и названные запросы здесь не являются возможностью.
Update:
Свойства в вопросе не являются ассоциации с другими лицами, но только некоторые расчетные значения. Это означает, что, например, fetch профили здесь не применяются, поскольку они применимы только к ассоциациям сущностей (или, по крайней мере, так я понял Hibernate manual). Вот пример одного из наших @Formula
свойств:
@Entity
public class A {
@Basic(fetch = FetchType.LAZY)
@Formula("(select count(*) from entity_D_table where ...)")
private int associatedDCount;
...
}
Но не являются ли профили выборки применимыми только к ассоциациям сущностей? Я добавил пример кода, как выглядят наши свойства, я не думаю, что профили извлечения будут работать здесь. –
Вы правы. Не могли бы вы рассмотреть возможность определения представления SQL в вашей базе данных и сопоставление нового объекта на нем, чтобы получить формулу с нетерпением как простое свойство? –
Я рассматриваю возможность создания представления, но для этого потребуется довольно много изменений в кодовой базе. В настоящее время мы используем графики сущностей JPA, чтобы с нетерпением загружать данные из десятков таблиц за один раз, и код ожидает, что он получит весь граф объекта. Но если нынешний подход окажется слишком медленным в бенчмаркинге, нам придется подумать об этом еще раз. –