Главная » Spring » Объявление фабрики сеансов Hibernate Spring

0

Основным интерфейсом для взаимодействий с Hibernate являет- ся интерфейс org.hibernate.Session. Интерфейс Session обеспечивает базовую функциональность доступа к данным, позволяя сохранять, обновлять, удалять и загружать объекты в/из базы данных. Именно через интерфейс Session прикладные объекты DAO будут выполнять все операции с хранилищем данных.

Стандартный способ получить ссылку на объект Session – обра- титься к реализации интерфейса SessionFactory  в Hibernate. Среди

всего прочего интерфейс SessionFactory отвечает за открытие, закры- тие и управление сеансами Hibernate.

Получить доступ к SessionFactory в приложениях на основе Spring можно через компоненты фабрики сеансов. Эти компоненты реали- зуют интерфейс FactoryBean фреймворка Spring, который воспроиз- водит объекты класса SessionFactory при внедрении в свойства типа SessionFactory. Это позволяет настраивать фабрику сеансов Hibernate наряду с другими компонентами в контексте приложения Spring.

Что касается настройки компонента фабрики сеансов Hibernate, имеются несколько вариантов на выбор. Решение зависит от того, желаете ли вы настроить сохранение объектов предметной области с использованием XML-файлов отображения или с помощью анно- таций. При выборе первого варианта на основе XML-файлов ото- бражений необходимо настроить компонент LocalSessionFactoryBean в Spring:

<bean   id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

<property name="dataSource" ref="dataSource" />

<property  name="mappingResources">

<list>

<value>Spitter.hbm.xml  </value>

</list>

</property>

<property   name="hibernateProperties">

<props>

<prop      key="dialect">org.hibernate.dialect.HSQLDialect</prop>

</props>

</property>

</bean>

Конфигурация компонента LocalSessionFactoryBean включает на- стройку трех свойств. В свойство dataSource внедряется ссылка на компонент DataSource. Свойство mappingResources принимает список из одного или более файлов отображений, определяющих стратегию хранения данных приложения. Наконец, свойство hibernateProperties позволяет определить мелкие детали поведения Hibernate. В данном случае фреймворку Hibernate сообщается, что он будет взаимодей- ствовать с базой данных Hypersonic и для создания SQL-запросов должен использовать диалект HSQLDialect.

Если предпочтение будет отдано аннотациям, тогда вместо ком- понента LocalSessionFactoryBean следует использовать компонент Anno- tationSessionFactoryBean:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.

➥AnnotationSessionFactoryBean">

<property name="dataSource" ref="dataSource" />

<property  name="packagesToScan" value="com.habuma.spitter.domain"   />

<property   name="hibernateProperties">

<props>

<prop      key="dialect">org.hibernate.dialect.HSQLDialect</prop>

</props>

</property>

</bean>

Как и в случае с компонентом LocalSessionFactoryBean, свойства dataSource и hibernateProperties определяют место, где следует искать соединение с базой данных и ее тип.

Но вместо списка файлов отображений можно воспользоваться свойством packagesToScan, чтобы сообщить фреймворку Spring один или более пакетов, где следует искать классы объектов предметной области, аннотированные для сохранения с помощью Hibernate. В их число входят классы, отмеченные аннотациями JPA @Entity или @MappedSuperclass, и собственной аннотацией Hibernate – @Entity.

Список из одного элемента. Свойство packagesToScan компонента Anno- tationSessionFactoryBean принимает массив строк, определяющих пакеты для поиска классов хранимых объектов. Обычно указывается список, как показано ниже:

<property name="packagesToScan">

<list>

<value>com.habuma.spitter.domain</value>

</list>

</property>

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

При желании можно также явно перечислить все прикладные классы хранимых объектов, определив список полных имен классов в свойстве annotatedClasses:

<property name="annotatedClasses">

<list>

<value>com.habuma.spitter.domain.Spitter</value>

<value>com.habuma.spitter.domain.Spittle</value>

</list>

</property>

Свойство annotatedClasses отлично  подходит  для  случаев,  ког- да в приложении имеются два-три класса хранимых объектов. Но в других случаях, при большом количестве классов, когда было бы слишком утомительно определять полный их список или когда желательно оставить за собой свободу добавлять и удалять классы без изменения конфигурации Spring, удобнее использовать свойство packagesToScan.

Определив компонент фабрики сеансов Hibernate в контексте приложения Spring, можно приступать к созданию классов DAO.

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

  • Комментарии