В моем классе mapper мне всегда нужно получить список отделов из моей компании:
@OneToMany(mappedBy = "company", orphanRemoval = true, cascade = CascadeType.ALL)
public List<CompanyDepartments> getDepartments()
{
return departments; //java.util.List variable.
}
Есть несколько тысяч отделов (около 2000+). Я пытаюсь сократить время, затрачиваемое на получение данных компании, и хочу начать с отделов, которые будут довольно статичными по своей природе.
Вариант 1: я всегда могу иметь частный метод в Mapper, который заполняет кеш при первом загрузке и возвращает из кэша все время.
Но есть ли что-нибудь более упрощенное? Я, вероятно, не первый, кто столкнулся с этим, и хотел узнать, как я мог бы подойти к этому. Есть ли известная аннотация, которую можно использовать. Как аннотация @Singleton по переменной в сущности? (нет такой аннотации, очевидно). Каков самый простой способ сделать этот список синглом.
Просто типичное приложение весеннего mvc 3, использующее весовые данные jpa для взаимодействия db.
То, что вы испытываете, является частью "несоответствия реляционного импеданса object-". Одним из решений было бы расширить вашу объектную модель, чтобы вы могли использовать левую попытку соединения для загрузки нескольких компаний, включая их подразделения, используя только один оператор SQL.
Проблема с использованием этого метода заключается в том, что вы можете заполнять только один список за раз. Хотя легко и легко определить множество подписок в мире объектов, трудно загрузить все эти списки одновременно (и, следовательно, эффективно) из реляционной базы данных. Однако это можно сделать в Oracle с использованием запросов object- или XMLType.
Прямой способ получить такие данные из СУБД - это написать пользовательские запросы, которые точно соответствуют задаче и предоставить только те данные, которые действительно необходимы. Для этого вам понадобится не только один класс компании, но и много - по одному для каждой задачи. - на самом деле вы наследуете вместо атрибуции
BTW, поэтому ORM по-прежнему считается Вьетнамом информатики - легко начать, но с трудом добиться успеха.
Я предлагаю эту ссылку, которая решает проблему запроса n +1... Как я могу решить проблему N +1 Selects?
Кроме того, вы можете поместить кеш (lvl 2) в службу поиска, если данные не изменяются в течение жизненного цикла приложения. http://docs.spring.io/spring/docs/3.1.0.M1/spring-framework-reference/html/cache.html
Другим подходом является добавление индексов на db.
Надеюсь, я дал вам все ответы на ваш вопрос.