这是我对Spring Bean的配置:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
然后我在DAO层中使用它,如下所示:
@Resource(name = "sessionFactory")
private SessionFactory sessionFactory;
最后,我的问题来自:
public T getById(int id) {
Session session = sessionFactory.getCurrentSession();
return (T) session.get(clz, id);
}
总之,我的问题是:
在课程"org.springframework.orm.hibernate4.LocalSessionFactoryBean"
中,SessionFactory's
方法没有实施 - “getCurrentSessio
”。
我跟踪了LocalSessionFactoryBean's
层次系统,但我找不到方法“getCurrentSession
”的实现。
我非常期待你的回答!
答案 0 :(得分:3)
工厂bean,正如其名称所示,充当工厂。它的作用是创建另一种类型的bean。 Spring注入了这个工厂bean的产品,即工厂bean创建的对象。 LocalSessionFactoryBean
生成SessionFactory
。
有关详情,请参阅the documentation。
答案 1 :(得分:2)
你没看到
LocalSessionFactoryBean的getCurrentSession()
来自api docs here
的结果受保护的抽象SessionFactory buildSessionFactory() 抛出异常
构建底层的Hibernate SessionFactory。 返回: 原始的SessionFactory(可能在它暴露给应用程序之前用事务感知代理包装) 并查看this
默认情况下,这个工厂bean会公开一个事务感知的SessionFactory代理,让数据访问代码可以使用普通的Hibernate SessionFactory及其getCurrentSession()方法,同时仍然可以参与当前的Spring管理的事务: