Две стратегии именования для одного SessionFactory весной - PullRequest
1 голос
/ 16 ноября 2010

Я использую hibernate 3.5 и Spring 3.0.4.

У меня есть несколько старых таблиц и несколько новых таблиц, которые нуждаются в различных NamingStrategies.Весной я объявляю sessionFactory с именем namingStrategy;

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="energyDataSource" />
<property name="hibernateProperties">
  <value>
      hibernate.show_sql=true
      hibernate.dialect=org.hibernate.dialect.MySQLDialect
  </value>
</property>
<property name="namingStrategy" ref="namingStrategy"/>
<property name="annotatedClasses">
  <list>
    <!-- user stuff -->
    <value>user.model.UserAccount</value>
 <!--  energy   -->
    <value>com.energy.domain.Selskapstype</value>
 </list>
</property>

Я хочу, чтобы стратегия именования использовалась для UserAccount, но не для Selskapstype.Есть ли способ сделать это?Или с аннотацией или XML?

Ответы [ 3 ]

1 голос
/ 16 ноября 2010

Конечно, просто напишите свою собственную реализацию NamingStrategy, которая делегирует одну из нескольких других стратегий, в зависимости от имени таблицы, а затем вставьте эту пользовательскую стратегию в SessionFactory.

0 голосов
/ 17 ноября 2010

Так вот, что я в итоге и сделал. Я создал в dataAccessContext.xml, который загружается при запуске с contextConfigLocation. Это включает в себя один из сеансов фабрики.

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
...
<property name="namingStrategy" ref="namingStrategy"/>
...
</bean>

В моем web.xml я включаю OpenSessionInViewFilter, который отображается в / *

<filter>
<filter-name>HibernateSessionRequestFilter</filter-name>    
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
<init-param>
    <param-name>sessionFactoryBeanName</param-name>
    <param-value>sessionFactory</param-value>
</init-param>

Затем другой sessionFactory включается в dataAccessContextEnergy.xml, который импортируется в мой весенний конфиг energy-config.xml.

Energy-config.xml также включает в себя перехватчик фильтра opensessioninview;

<mvc:interceptors>
 <bean class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">
  <property name="sessionFactory" ref="sessionFactoryEnergy"/>
 </bean>

Итак, у меня есть две фабрики сессий и две открытые сессии ... Надеюсь.

Это хороший способ сделать это? Или я буду гореть в аду? :-)

0 голосов
/ 16 ноября 2010

Не могли бы вы просто использовать две разные фабрики сессий?Один для старых таблиц и один для новых таблиц?Таким образом, вы можете установить разные стратегии именования для каждой сессионной фабрики.

иметь разные классы дао для каждой сессионной фабрики и соответственно вводить.

cheers

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