У меня проблема с производительностью в режиме гибернации, которая слишком дорога для производительности.
Я попытаюсь объяснить мою текущую реализацию, которая должна быть улучшена с помощью псевдо-классов.
Допустим, у меня есть следующие классы POJO (классы Entity представляют собой аннотированные «копии» в спящем режиме).
Country.java and CountryEntity.java
City.javaand CityEntity.java
Inhabitant.javaand InhabitantEntity.java
И я хочу добавить город в страну и сохранить / сохранить его в базе данных, новый город прибывает полностью заполненным как POJO.
Текущий код
CountryEntity countryEntity = CountryDao.fetch(someId);
Country country = CountryConverter(countryEnity);
country.getCities.add(newCity);
countryEnity = CountryEntityConverter(country);
CountryDao.save(countryEnity);
Это приводит к серьезной проблеме производительности. Допустим, у меня 200 городов с населением 10 000 человек.
Для меня, чтобы добавить новый город, конвертер конвертирует 200 x 10 000 = 2 000 000 местный житель -> местный житель -> местный житель
Это создает огромную нагрузку на сервер, так как новые города добавляются часто.
Также не нужно преобразовывать все города страны, чтобы просто сохранить и подключить еще один.
Я думаю о создании преобразователя света, который не преобразует все поля, а только те, которые мне нужны для некоторой бизнес-логики при добавлении города, но они останутся неизменными, я не знаю, будет ли Hibernate достаточно хорош, чтобы справиться с этим сценарием.
Например, если я сохраню сущность с множеством пустых полей и список городов только с одним городом, могу ли я сказать hibernate объединить это вместе с базой данных.
Или есть другой подход, который я могу использовать, чтобы решить проблему с производительностью, но не разделяя POJO и сущности?
Некоторый код ниже показывает мой текущий "медленный" код реализации.
Country.Java (pseudo code)
private fields
private List<City> cities;
City.Java (pseudo code)
private fields
private List<Inhabitant> inhabitants;
Inhabitant.Java (pseudo code)
private fields
В настоящее время я получаю CountryEnity через Java-класс Dao.
Тогда у меня есть конвертер классов (Entities -> POJO), который устанавливает все поля и инициирует все списки.
У меня также есть похожие конвертеры классов конвертации (POJO -> Entities).
CountryConverter(countryEntity)
Country country = new Country();
Country.setField(countryEntity.getField())
Loop thru cityEnitites
Country.getCities.add(CityConverter(cityEntity))
return country
CityConverter(cityEntity)
City city = new City()
city.setField(cityEntity.getField())
Loop thru inhabitantEnitites
city.getInhabitants.add(InhabitantConverter(inhabitantEntity))
return country
InhabitantConverter(inhabitantEntity)
Inhabitant inhabitant = new Inhabitant()
inhabitant.setField(inhabitantEntity.getField())
return inhabitant
Заранее спасибо / Фермер