如何使用java配置创建SessionFactory?
@Bean
public SessionFactory sessionFactory(){
AnnotationSessionFactoryBean sessionFactoryBean = new AnnotationSessionFactoryBean();
sessionFactoryBean.setConfigLocation(new ClassPathResource("hibernate.cfg.xml"));
return sessionFactoryBean.getObject();
}这对某些reason...it不起作用,总是返回null。
发布于 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+。
发布于 2011-11-14 20:21:38
改为返回工厂:
@Bean
public AbstractSessionFactoryBean sessionFactoryBean(){
AnnotationSessionFactoryBean sessionFactoryBean = new AnnotationSessionFactoryBean();
sessionFactoryBean.setConfigLocation(new ClassPathResource("hibernate.cfg.xml"));
return sessionFactoryBean;
}如果你需要在代码中的某个地方直接注入SessionFactory,添加这个助手方法:
public SessionFactory sessionFactory() {
return sessionFactoryBean().getObject();
}请注意,助手sessionFactory()是,而不是用@Bean注释的-这一点非常重要。
发布于 2011-11-14 20:26:22
Tomasz是对的,但我相信使用"new“创建对象实例并不符合Spring的概念:
我认为你需要这样做:
<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中使用它:
@Autowired
SessionFactory sessionFactory;然后在你的方法内部:
Session session = sessionFactory.getCurrentSession();https://stackoverflow.com/questions/8121461
复制相似问题