hibernate - Singleton SessionFactory 不适用于 Hibernate 4.3.1
问题描述
我正在构建一个产品管理系统,并准备了我的数据库 pojos。之后我想使用单例 sessionFactory 而不是在每个类中使用一个新的。当我创建和构建一个 Java 类时;
package Controller;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
public class SFController {
private static SFController instance = null;
private static SessionFactory sessionFactory;
private static StandardServiceRegistry serviceRegistry;
private SFController(){
Configuration configuration = new Configuration();
configuration.configure();
serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
}
public static SFController getInstance(){
if(instance == null){
instance = new SFController();
}
return instance;
}
public synchronized static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
没有任何错误。但我无法弄清楚如何在我的控制器页面中正确使用它。我就是这样尝试的;
package Controller;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
public class TryObject {
SFController newObject = SFController.getInstance();
Session session = newObject.getSessionFactory();
}
TryObject 方法的第二行说将 Session 更改为 SessionFactory。即使我这样做,我也无法到达session.save() 或 session.beginTransaction(); 尝试了更多的单例示例,但无法弄清楚。如果你能告诉我我做错了什么,我会很高兴。
解决方案
您的 getSessionFactory() 方法返回一个 SessionFactory,而不是一个 Session。一旦你有了一个 SessionFactory,你就可以打开一个新的 Session:
SFController newObject = SFController.getInstance();
SessionFactory factory = newObject.getSessionFactory();
Session session = factory.openSession();
推荐阅读
- c - Zlib nodejs错误:存储的块长度无效
- javascript - 如何在没有 jQuery 的情况下在模态中创建平滑滚动到给定 id 的元素
- sharepoint - 如何使用 Microsoft Graph 搜索所有网站?
- azure-cosmosdb - Order By ASC 与 DESC 在性能上的巨大差异
- java - 如何强制 Jgit 使用 SSH 而不是 HTTPs?
- javascript - 关闭浏览器后注销
- reactjs - 使用 React 按 Cruise Line 显示游轮列表
- c# - 如何修复额外的循环运行?
- unity3d - 相应地用 2D 立方体动态填充屏幕 Screen.width
- javascript - 如何在 Vue 中从另一个过滤器访问一个附加的过滤器