首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

spring管理hibernate的有关问题

2012-01-30 
spring管理hibernate的问题在spring没有配置事务管理的情况下,只配置了sessionFactorybean idsessionFa

spring管理hibernate的问题
在spring没有配置事务管理的情况下,只配置了sessionFactory

<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >
<property name="configLocation">
<value>WEB-INF/hibernate.cfg.xml</value>
</property>
</bean>

<bean id="studao" class="dao.StudentDao" singleton="false">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>

我的这个学生dao这么写事务能提交吗

public class StudentDao extends HibernateDaoSupport implements IStudentDao {

//添加学生
public void inputStu(Student student){
 
HibernateTemplate ht=this.getHibernateTemplate(); 
try {
 
 
 
ht.save(student);


} catch (Exception e) {

e.printStackTrace();}


}

还有 HibernateTemplate 和 HibernateDaoSupport
有什么好处和作用~~


[解决办法]
如果你的这个dao不涉及service的话,只在本身的dao.impl中做测试
<bean id="studao" class="dao.StudentDao" singleton="false"> 
<property name="sessionFactory"> 
<ref local="sessionFactory"/> 
</property> 
</bean> 
是没问题的,因为spring内在的HibernateTemplate就含有了自动提交和打开连接数据库的能力,比如session的打开关闭等等
即这就不用自己进行提交和管理session了,应该说更方便了
[解决办法]
你吧DateSource也封装成Bean。让SessionFactory依赖DateSource。不要有hibernate.cfg.xml 容易出错。
[解决办法]
自己的dao有继承HibernateDaoSupport 的话
事务会提交,但是也建议你在spring配置文件中配置事务管理器

[解决办法]
顶楼上那些。。。。。。。。
[解决办法]
你的sessionFactory要依赖于dataSource
[解决办法]
这种情况下要么使用spring的声明事务,要么手动提交事务,否则的话是会出现问题。

使用hibernateTemplate 和 daoSupport 能让你不必去关心想一些session的问题,还有就是将一些操作集成化。
[解决办法]
必须先有datasSource 
然后才有sessionFactory
[解决办法]
既然继承了HibernateDaoSupport,要配置事务的应该,或者你手动提交事务,这样的话,你还继承这个类干嘛呢?继承这个类,就是使用spring的声明式事务,帮你管理session的 关注!
[解决办法]
你继承了HibernateSupport并且实现了HibernateTemplate
然后掉用里面的save方法就已经提交了事物的,并且这个方法应该抛出的是运行时异常
另外说一点:实现这个接口有个缺点,就是它没有进行事物的回滚。
[解决办法]
如果在hibernate配置文件中添加了
<property name="connection.autocommit">true</property>
是可以提交的
[解决办法]
很明显是在hibernate配置文件中配置了属性
[解决办法]
hibernate.cfg.xml 应该贴出来
[解决办法]
楼主可以试着在 数据库 里插入语句看一下,(主键自动增长)看 插入语句的 主键id 是否为1,如果是2,则说明你运行save方法添加成功了 但是 回滚了 所以第1条save的数据又删掉了
[解决办法]
主键自动增长是不是搞错了。。换个看。。我碰到过这情况。。
[解决办法]

Java code
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"  "http://www.springframework.org/dtd/spring-beans.dtd"> <beans>     <bean id="dataSource"           class="org.springframework.jdbc.datasource.DriverManagerDataSource">         <property name="driverClassName">             <value>com.mysql.jdbc.Driver</value>         </property>         <property name="url">             <value>jdbc:mysql://localhost:3306/springdb</value>         </property>         <property name="username">             <value>root</value>         </property>         <property name="password">             <value>root</value>         </property>      </bean>         <bean id="sessionFactory"            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"           destroy-method="close">         <property name="dataSource">             <ref bean="dataSource"/>         </property>         <property name="mappingResources">             <list>                 <value>com/livechance/User.hbm.xml</value>             </list>         </property>         <property name="hibernateProperties">             <props>                 <prop key="hibernate.dialect">                     org.hibernate.dialect.MySQLDialect                </prop>                <prop key="hibernate.show_sql">                     true                </prop>                <prop key="hibernate.format_sql">                     true                </prop>             </props>         </property>     </bean>     <bean id="userDAO" class="com.livechance.UserDAO">         <property name="sessionFactory">             <ref bean="sessionFactory"/>         </property>     </bean>
[解决办法]
Java code
Session   session   =   getHibernateTemplate().getSessionFactory().openSession();                             Transaction   tx   =   session.beginTransaction();                                 tx.commit();                             session.close();
[解决办法]
探讨
如果你的这个dao不涉及service的话,只在本身的dao.impl中做测试
<bean id="studao" class="dao.StudentDao" singleton="false">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
是没问题的,因为spring内在的HibernateTemplate就含有了自动提交和打开连接数据库的能力,比如session的打开关闭等等
即这就不用自己进行提交和管理session了,应该说更方便了

[解决办法]
参考下我下面写的代码

Java code
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">  <property name="driverClassName">   <value>com.mysql.jdbc.Driver</value>  </property>  <property name="url">   <value>jdbc:mysql://192.168.22.155:3306/e-learning</value>  </property>  <property name="username">   <value>root</value>  </property>  <property name="password">   <value>000</value>  </property> </bean>   <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  <property name="dataSource">   <ref local="dataSource" />  </property>  <property name="mappingResources">   <list>    <value>com/hibernate/TUserinfo.hbm.xml</value>    <value>com/hibernate/TFiletype.hbm.xml</value>    <value>com/hibernate/TFileinfo.hbm.xml</value>    <value>com/hibernate/TUserGroup.hbm.xml</value>    <value>com/hibernate/TRight.hbm.xml</value>    <value>com/hibernate/TUserlog.hbm.xml</value>    <value>com/hibernate/TGroup.hbm.xml</value>   </list>  </property>  <property name="hibernateProperties">   <props>    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>    <prop key="hibernate.show_sql">true</prop>   </props>  </property> </bean>  <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">  <property name="sessionFactory">   <ref local="sessionFactory" />  </property> </bean>  <bean id="userDAO" class="com.daoimp.TUserinfoDAOImp">  <property name="sessionFactory">   <ref local="sessionFactory" />  </property> </bean>  <bean id="userDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">  <property name="transactionManager">   <ref bean="transactionManager" />  </property>  <property name="target">   <ref local="userDAO" />  </property>  <property name="transactionAttributes">   <props>    <prop key="insert*">PROPAGATION_REQUIRED</prop>    <prop key="get*">PROPAGATION_REQUIRED</prop>    <prop key="is*">PROPAGATION_REQUIRED</prop>   </props>  </property> </bean>  <bean id="filetypeDAO" class="com.daoimp.TFiletypeDAOImp">  <property name="sessionFactory">   <ref local="sessionFactory" />  </property> </bean>  <bean id="filetypeDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">  <property name="transactionManager">   <ref bean="transactionManager" />  </property>  <property name="target">   <ref local="filetypeDAO" />  </property>  <property name="transactionAttributes">   <props>    <prop key="insert*">PROPAGATION_REQUIRED</prop>    <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>    <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop>   </props>  </property> </bean>  <bean id="rightDAO" class="com.daoimp.TRightDAOImp">  <property name="sessionFactory">   <ref local="sessionFactory" />  </property> </bean>  <bean id="rightDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">  <property name="transactionManager">   <ref bean="transactionManager" />  </property>  <property name="target">   <ref local="rightDAO" />  </property>  <property name="transactionAttributes">   <props>    <prop key="insert*">PROPAGATION_REQUIRED</prop>    <prop key="get*">PROPAGATION_REQUIRED</prop>    <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop>   </props>  </property> </bean>  <bean id="usergroupDAO" class="com.daoimp.TUserGroupDAOImp">  <property name="sessionFactory">   <ref local="sessionFactory" />  </property> </bean>  <bean id="usergroupDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">  <property name="transactionManager">   <ref bean="transactionManager" />  </property>  <property name="target">   <ref local="usergroupDAO" />  </property>  <property name="transactionAttributes">   <props>    <prop key="insert*">PROPAGATION_REQUIRED</prop>    <prop key="get*">PROPAGATION_REQUIRED</prop>    <prop key="is*">PROPAGATION_REQUIRED</prop>   </props>  </property> </bean>  <bean name="infoService" class="com.struts.service.InfoService" singleton="false">  <property name="userDAO">   <ref bean="userDAOProxy" />  </property>  <property name="usergroupDAO">   <ref bean="usergroupDAOProxy" />  </property>  <property name="groupDAO">   <ref bean="groupDAOProxy" />  </property>  <property name="rightDAO">   <ref bean="rightDAOProxy" />  </property>  <property name="filetypeDAO">   <ref bean="filetypeDAOProxy" />  </property> </bean>  <bean name="fileTypeService" class="com.struts.service.FileTypeService" singleton="false">  <property name="filetypeDAO">   <ref bean="filetypeDAOProxy" />  </property> </bean>  <bean name="rightService" class="com.struts.service.RightInfoService" singleton="false">  <property name="rightDAO">   <ref bean="rightDAOProxy" />  </property> </bean>  <bean name="/login" class="com.struts.action.LoginAction" singleton="false">  <property name="infoService">   <ref bean="infoService" />  </property>  <property name="fileTypeService">   <ref bean="fileTypeService" />  </property>  <property name="rightService">   <ref bean="rightService" />  </property> </bean>  <bean id="fileinfoDAO" class="com.daoimp.TFileinfoDAOImp">  <property name="sessionFactory">   <ref local="sessionFactory" />  </property> </bean>  <bean id="fileinfoDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">  <property name="transactionManager">   <ref bean="transactionManager" />  </property>  <property name="target">   <ref local="fileinfoDAO" />  </property>  <property name="transactionAttributes">   <props>    <prop key="insert*">PROPAGATION_REQUIRED</prop>    <prop key="get*">PROPAGATION_REQUIRED</prop>    <prop key="is*">PROPAGATION_REQUIRED</prop>   </props>  </property> </bean>  <bean name="fileInfoService" class="com.struts.service.FileInfoService" singleton="false">  <property name="fileinfoDAO">   <ref bean="fileinfoDAOProxy" />  </property> </bean>  <bean name="/show" class="com.struts.action.ShowFileNameAction" singleton="false">  <property name="fileInfoService">   <ref bean="fileInfoService" />  </property> </bean> 

热点排行