我正在使用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?
答案 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和两个开放会话......我希望如此。
这是一个很好的方法吗?或者我会在地狱中燃烧? :-)