首先说一下题目的意思。比如在Spring配置文件中,有:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
destroy-method="destroy">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="mappingResources">
<list>
<value>mapping.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.SybaseDialect
</prop>
<prop key="hibernate.query.factory_class">
org.hibernate.hql.classic.ClassicQueryTranslatorFactory
</prop>
</props>
</property>
<!--<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
-->
</bean>
注释部分可以代替掉上面所有的property属性。而本文要比较的就是代替与否的效果差别。
先介绍一下背景吧,在做一个系统的过程中,第一种使用的是直接在spring配置文件设置sessionFactory属性的方法(如上代码)。系统的基本框架是Spring MVC&Hibernate. 应用Spring配置Transaction,而数据库操作基本永Spring的HibernateTemplete进行。事实上,这样做基本没有出现什么问题。
为了尝试Hibernate配置的其他属性(因为笔者不是很清楚Spring对此是否很好的支持),从网上看到了如注释代码般,对Hibernate配置文件进行引用的方法(暂称为第二种)。无心之下的一个尝试,带来了很多麻烦。
最大的问题是采用引用第二种方法后,Spring对于Transaction的管理变得非常不稳定。经常有Transaction 发生死锁(这里死锁的意思是,程序运行过程中数据库没有任何响应,也没有异常,而且事后发现,Transaction 没有被提交。) 甚至于,这类死锁发生时,用数据库客户端(Sybase Sql Advatage)也无法访问数据库(表现为长时间停顿,然后报连接丢失)。
另外发现,如果用第二种方法,很多基本的JDBC操作,如果不写在Transaction中,将只有第一次操作结果正常的。比如,调用sp取某值。(为了简便,绕开了HibernateTemplate,直接用JDBC基本操作处理。)这种情况下,对sp的调用需要写在事务内部,不然只能取到一次值,后面返回的值会与第一次完全一样。(同事说到这可能跟Sybase也有关,具体如何,以后有机会再研究)。而如果采用第一种配置文件的写法,无论有没有写在Transaction内部,都不会有问题。
对于事务管理不稳定的原因,我想,是不是因为在第一种中,对DataSource的定义是由Spring完成的。比如:这里看到,DataSource定义成DriverManagerDataSource的实例。
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>com.sybase.jdbc2.jdbc.SybDriver</value>
</property>
<property name="url">
<value>jdbc:sybase:Tds:aaa.bbb.ccc.net:4105</value>
</property>
<property name="username">
<value>user</value>
</property>
<property name="password">
<value>pass</value>
</property>
</bean>
而第二种方法中,似乎没有牵涉到DataSource的定义。(也就是说,很可能这个处理交给了Hibernate)从而使得Spring 对数据源中某些部分的处理变得异常
笔者还认为,第二种方法常用于这样一种情况:结合Spring与Hibernate开发系统,但不使用Spring 关于Hibernate的API(如HibernateTemplate的API),还是直接使用Hibernate的。后来笔者的了解也证明,也许这种情况对于开发更有好处一些。
上面所写仅作记载。如果有机会完整读一下Spring这一部分的代码,应该会有更好的解释吧。
分享到:
相关推荐
3. 在Spring配置文件中配置SessionFactory和TransactionManager。 4. 使用@Autowired注解注入SessionFactory,并在需要的地方进行数据库操作。 这个过程使得我们可以充分利用Spring的IoC(控制反转)和AOP(面向切...
整合SSH涉及到的主要配置文件有`struts2-spring-plugin.xml`、`spring-context.xml`以及Hibernate的相关配置文件(如`hibernate.cfg.xml`)。`struts2-spring-plugin.xml`配置Struts2与Spring的集成,确保Action类由...
综上,"hibernate+spring配置文件"的配置涉及多个层面,包括Spring的IoC、事务管理、数据源配置,以及Hibernate的SessionFactory、实体映射等。理解并正确配置这些元素是成功整合SSH的关键,也是提升开发效率和系统...
在Spring框架中,`applicationContext.xml`是应用上下文配置文件,它是整个Spring应用的核心,用于定义bean的创建、依赖关系以及配置。下面将详细解释配置文件中的各个部分。 首先,XML头文件定义了编码方式,`...
在本案例中,我们将探讨如何在已有的MySQL数据库环境下,配置Spring和Hibernate来实现数据访问层。 首先,我们需要在项目中引入Spring和Hibernate的相关依赖。在Maven或Gradle的构建文件中,添加对应的依赖库,如...
同时,`Spring`的配置文件(如`applicationContext.xml`)中会包含`Hibernate`的相关bean定义,如SessionFactory、DataSource、TransactionManager等,实现对`Hibernate`的管理。 接着,`HQL`是`Hibernate`提供的...
总结,本项目展示了如何在Spring MVC和Hibernate环境中实现事务管理,通过MyEclipse自动生成的包和配置文件,简化了开发流程。在实际应用中,这样的整合能够提供高效且易于维护的Web应用,同时,声明式事务管理极大...
在联想配置文件中,Hibernate的配置通常包括实体类映射(hbm.xml文件)、数据源配置、SessionFactory创建等。 这四个框架的联想配置文件通常会整合在一起,形成一个完整的Java Web应用的配置体系。例如,Spring可以...
2. **配置SessionFactory**: 在Spring配置文件中,使用`LocalSessionFactoryBean`定义SessionFactory的配置,指定之前创建的`hibernate.cfg.xml`文件位置。 3. **配置HibernateTemplate**: Spring通过`...
6. 配置事务管理:在Spring配置文件中启用事务管理,并定义事务边界。 7. 测试整合:编写测试用例,验证Spring如何管理和调用Hibernate完成数据操作。 五、示例代码 例如,创建一个User实体类,对应的DAO接口和实现...
4. **配置DataSource**:同样在Spring配置文件中,定义一个DataSource Bean,这通常是连接池的实现,如Apache DBCP或C3P0,用于管理数据库连接。 5. **配置Hibernate SessionFactory Bean**:使用`...
创建一个Hibernate的SessionFactory配置,通常在Spring的XML配置文件中完成。这包括数据库连接参数(如URL、用户名、密码)、实体类扫描路径、方言设置等。 3. **配置事务管理器**: 在Spring配置中定义一个...
在Java企业级开发中,Spring和Hibernate是两个非常重要的框架,Spring主要负责依赖注入和管理,而Hibernate则专注于对象关系映射(ORM)和数据库操作。本教程将详细介绍如何将两者结合,通过全XML配置方式进行集成,...
本文详细介绍了Hibernate与Spring集成过程中涉及的关键配置,包括数据源、SessionFactory、事务管理器以及事务代理工厂的配置细节。通过这些配置,可以实现对数据库的高效访问,并利用Spring的事务管理机制来简化...
在Spring配置文件(如applicationContext.xml)中配置SessionFactory的示例代码如下: ```xml <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> ...
在配置过程中选择Spring来管理SessionFactory,不使用hibernate.cfg.xml文件,而是将Hibernate配置集成到Spring配置文件中。设置SessionFactory ID,例如“sessionFactory”,并配置数据库连接信息,如数据源...
- 创建Spring配置文件(如`applicationContext.xml`),配置Bean定义,包括Service层、DAO层以及Action类等的实例化和依赖注入。 - 使用Spring的AOP功能,实现事务管理。例如,可以定义一个事务切面,对需要进行...
SpringMVC、Spring和Hibernate是Java开发中三大重要的框架,它们各自负责Web应用程序的不同层面,协同工作以构建高效、可维护的系统。SpringMVC作为Spring框架的一部分,主要用于处理HTTP请求,Spring则提供了依赖...
Struts2.5、Spring5和Hibernate5.2是Java Web开发中三个非常重要的框架,它们的整合可以构建出高效、灵活的企业级应用。SSH整合指的是Struts2、Spring和Hibernate的集成,这三个框架分别负责MVC(模型-视图-控制器)...
然后,需要在Spring配置文件中配置HibernateTransactionManager,以便Spring可以管理Hibernate的事务。这一步是实现Spring的事务管理功能,确保数据操作的原子性和一致性。 在业务层,可以使用Spring的@Autowired...