Мухи многоколонные в Хибернате 5 - PullRequest
0 голосов
/ 06 июня 2019

Есть ли способ реализовать компоненты Flyweight, загружаемые из нескольких столбцов в Hibernate 5?

У меня есть денормализованные таблицы, каждая с двумя столбцами, arch_name и arch_version, которые сопоставляются с классом Archetype:

public class Archetype {
    private String name;
    private String version;
    ...
}

В настоящее время они представлены в файлах сопоставления с использованием компонента:

<hibernate-mapping>
     <class name="MyEntity">
         ...
         <component name="archetype">
             <property name="name" column="arch_name" type="string"/>
             <property name="version" column="arch_version" type="string"/> 
         </component>
         ...

Это позволяет такие запросы как:

select from MyEntity.class entity where entity.archetype.name = 'somearchetype';

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

Это не представляется возможным при использовании ComponentTuplizer, так как он создает экземпляр компонента и заполняет его в 2 этапа (intantiate () и setPropertyValues ​​()).

UserType или CompositeUserType выглядят так, как будто они должны работать, но, похоже, нет способа сопоставить их с <component> и сохранить существующую поддержку запросов.

Модель данных не может быть изменена.

Мой текущий обходной путь:

  • пользователь Interceptor для замены экземпляров Archetype кэшированными значениями в onLoad ()
  • результаты массажа, возвращенные из Query.list (), чтобы сделать то же самое

Помимо того, что это уродливо, это приводит к тому, что создается много экземпляров Архетипа, которые затем отбрасываются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...