首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Hibernate SessionFactory

Spring Hibernate SessionFactory
EN

Stack Overflow用户
提问于 2011-11-14 20:18:14
回答 5查看 50.6K关注 0票数 5

如何使用java配置创建SessionFactory?

代码语言:javascript
复制
@Bean
public SessionFactory sessionFactory(){
    AnnotationSessionFactoryBean sessionFactoryBean = new AnnotationSessionFactoryBean();
    sessionFactoryBean.setConfigLocation(new ClassPathResource("hibernate.cfg.xml"));
    return sessionFactoryBean.getObject();
}

这对某些reason...it不起作用,总是返回null。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-11-15 02:20:53

这里值得注意的是,Spring3.1引入了LocalSessionFactoryBuilder,它专门为在@Bean方法中使用而设计。

http://static.springsource.org/spring/docs/3.1.0.RC1/javadoc-api/org/springframework/orm/hibernate4/LocalSessionFactoryBuilder.html

这解决了处理FactoryBeans、getObject()方法等问题。FactoryBeans非常适合在XML中使用,但在@Bean方法中不是很理想。

请注意,这个新构建器仅是Hibernate 4.1+。

票数 5
EN

Stack Overflow用户

发布于 2011-11-14 20:21:38

改为返回工厂:

代码语言:javascript
复制
@Bean
public AbstractSessionFactoryBean sessionFactoryBean(){
    AnnotationSessionFactoryBean sessionFactoryBean = new AnnotationSessionFactoryBean();
    sessionFactoryBean.setConfigLocation(new ClassPathResource("hibernate.cfg.xml"));
    return sessionFactoryBean;
}

如果你需要在代码中的某个地方直接注入SessionFactory,添加这个助手方法:

代码语言:javascript
复制
public SessionFactory sessionFactory() {
    return sessionFactoryBean().getObject();
}

请注意,助手sessionFactory(),而不是用@Bean注释的-这一点非常重要。

票数 12
EN

Stack Overflow用户

发布于 2011-11-14 20:26:22

Tomasz是对的,但我相信使用"new“创建对象实例并不符合Spring的概念:

我认为你需要这样做:

代码语言:javascript
复制
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="hibernateProperties">
 <props>
    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
    <prop key="hibernate.show_sql">true</prop> 
    <prop key="hibernate.hbm2ddl.auto">update</prop> 
    <prop key="hibernate.show_sql">true</prop> 
  </props>
     </property>
        <property name="annotatedClasses">
      <list>
        <value>com.vanilla.objects.Student</value>
        <value>com.vanilla.objects.Address</value>

         </list>
    </property>
  </bean>

<bean id="transactionManager" 
            class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
  </bean>

然后你可以在Spring bean中使用它:

代码语言:javascript
复制
@Autowired
    SessionFactory sessionFactory;

然后在你的方法内部:

代码语言:javascript
复制
Session session = sessionFactory.getCurrentSession();
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8121461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档