还记得每个hibernate初学者都会被指导使用这样的函数来获取数据库资源
public static Session currentSession() throws HibernateException {
Session session = (Session) threadLocal.get();
if (session == null) {
if (sessionFactory == null) {
try {
cfg.configure(CONFIG_FILE_LOCATION);
sessionFactory = cfg.buildSessionFactory();
}
catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
session = sessionFactory.openSession();
threadLocal.set(session);
}
return session;
}
当你打开TOmcat的时候,一下有几十人来访问你的页面,那么这个函数很有可能就会初始化失败了。多年前实践中总结出来,修改一下,今天想到在这里写一下:
public static Session currentSession() throws HibernateException {
Session session = (Session) threadLocal.get();
if (session == null) {
if (sessionFactory == null) {
synchronized(SessionFactory.class){
if (sessionFactory == null) {
try {
cfg.configure(CONFIG_FILE_LOCATION);
sessionFactory = cfg.buildSessionFactory();
}
catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
}
}
session = sessionFactory.openSession();
threadLocal.set(session);
}
return session;
}
实际上就是一个同步问题,避免多个人同时进入hibernate初始化
分享到:
相关推荐
- 使用懒加载(Lazy Loading)策略,延迟加载不常用的数据,降低初始化时的内存占用。 - 合理设置实体的访问策略,例如字段访问优于属性访问,以减少不必要的代理对象生成。 4. **配置优化**: - 调整Hibernate...
4. **懒加载与立即加载**:Hibernate的懒加载机制可以推迟关联对象的加载,减少初始化时的数据量。但过度依赖懒加载可能导致N+1查询问题,因此需要合理设计实体关系和加载策略。 5. **预加载与子查询**:预加载...
4. **延迟加载与立即加载**:根据需求选择合适的加载策略,对于不常用的数据可采用延迟加载,减少初始化时的内存消耗。 三、对象关系映射优化 1. **懒加载与Eager加载**:理解两者区别,避免在不必要时加载关联...
懒加载(Lazy Loading)是一种优化策略,只在真正需要时才加载关联对象,而立即加载(Eager Loading)则会在初始加载时加载所有关联对象。开发者可以根据性能和需求选择合适的加载策略。 **十、实体关系映射** ...
在本项目中,性能瓶颈主要出现在Hibernate的XML配置解析和Spring容器的bean初始化上。首先,针对Hibernate的性能优化,可以从减少XML解析开销入手。按照hibernate.org上的建议,可以通过将XML配置序列化到本地文件,...
7. **预热与初始化**:预热是指在应用启动时进行一些基础操作,如加载常用对象到缓存,以减少用户请求时的延迟。初始化策略也可以根据需求定制。 8. **二级缓存同步策略**:了解不同缓存同步模式(如read-only、...
总的来说,Hibernate AIP涵盖了从项目初始化、数据库设计、对象关系映射、数据操作到性能调优的全过程。通过熟练掌握这些知识点,开发者可以高效地在Java项目中整合和利用数据库资源,实现更简洁、可维护的代码。在...
- **属性延迟加载**:对对象的某些属性进行延迟加载,减少初始化时的数据加载量。 #### 七、方法选用 1. **结果集处理**:使用ScrollableResults或Iterator替代List或Set,以避免一次性加载大量数据导致内存溢出。...
例如,Middlegen可以用于快速初始化项目,而Hibernate Extensions则可以在后期的开发过程中提供持续的优化和支持。 【压缩包子文件的文件名称列表】"Hibernate工具"表明压缩包可能包含了与Hibernate相关的各种工具...
三、Hibernate 3的配置与初始化 1. hibernate.cfg.xml:这是Hibernate的主要配置文件,包含了数据库连接信息、缓存配置、方言设置等。 2. SessionFactory:它是Hibernate的核心,负责管理所有Session的创建和配置。...
大量的对象初始化**:一次性加载大量关联对象可能导致内存溢出。应考虑使用`fetch="select"`或`fetch="join"`策略来控制加载行为。 **3. 延时加载的误用**:不合理的延时加载可能导致“懒加载地狱”,即在不期望的...
三、配置与初始化 Hibernate的配置文件(hibernate.cfg.xml)包含了数据库连接信息、缓存设置等关键参数。通过Configuration类加载配置,然后通过buildSessionFactory()方法生成SessionFactory实例。 四、实体类与...
- Hibernate使用CGLIB动态代理机制,使得many-to-one关系的子对象也能实现延迟初始化。即使在调试时看到SQL语句,但如果正确配置,实际执行速度会有所提升。 5. **缓存(Cache)使用**: - Hibernate提供了第一级...
2. **Configuration类**:Hibernate的初始化工作主要由Configuration类完成,它负责读取配置文件,建立SessionFactory,并且可以加载Hibernate的映射文件(.hbm.xml)。 3. **SessionFactory**:SessionFactory是...
5. **初始化 SessionFactory**:根据配置文件创建 SessionFactory 实例,它是线程安全的,整个应用程序只需一个。 6. **使用 Session**:通过 SessionFactory 获取 Session 实例,进行数据库操作,如保存、更新、...
创建一个简单的Java应用,初始化`SessionFactory`,打开`Session`,创建一个`User`对象并保存到数据库,最后关闭`Session`。这将演示基本的Hibernate操作流程。 8. 事务管理: Hibernate支持JTA和JDBC两种事务...
3. **配置与初始化**:使用Hibernate时,需要配置Hibernate配置文件(hibernate.cfg.xml),其中包含数据库连接信息、方言设置等。初始化Hibernate会话工厂(SessionFactory)是应用程序启动时的关键步骤。 4. **...
7. **操作流程**:在学习这个例子时,开发者通常会经历以下步骤:加载配置、初始化SessionFactory、打开Session、创建或获取实体对象、执行CRUD操作(创建、读取、更新、删除)、最后关闭Session。 通过分析这个...