Spring中一个SessionFactory的两个Namingstrategies

时间:2010-11-16 13:50:06

标签: hibernate spring annotations

我正在使用hibernate 3.5和Spring 3.0.4。

我有一些旧表和一些需要不同NamingStrategies的新表。我在spring中使用namingStrategy声明了一个sessionFactory;

<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>

  

我希望namingstrategy为UserAccount提供支持,但不支持Selskapstype。有没有办法做到这一点?是注释还是xml?

3 个答案:

答案 0 :(得分:1)

当然,只需编写自己的NamingStrategy实现,根据表名,委托其他几种策略之一,然后将该自定义策略插入SessionFactory

答案 1 :(得分:0)

你能使用两个不同的sessionFactories吗?一个用于旧表,一个用于新表?这样,您可以为每个sessionfactory设置不同的命名策略。

为每个sessionfactory设置不同的dao类并相应地进行注入。

欢呼声

答案 2 :(得分:0)

所以这就是我最终做的事情。我创建了dataAccessContext.xml,它在启动时使用contextConfigLocation加载。这包括sessionFactories之一。

<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中,该文件在我的spring config energy-config.xml中导入。

Energy-config.xml还包括opensessioninviewfilterinterceptor;

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

那么我有两个sessionFactories和两个开放会话......我希望如此。

这是一个很好的方法吗?或者我会在地狱中燃烧? :-)