Spring+Hibernate不能刷新数据库,Spring+Hibernate的事务不起作用

cloud 2007-06-19 08:14:59
我在使用Hibernate的时候,发现如果调用Hibernate写数据库,如save,如果不加Transaction,执行完后commit transacion的话,数据是不会写道数据库里面的,不管我怎么flush session,而我看到的资料都是说flush就会往数据库里面写数据。不知道兄弟们有没有碰到这个问题,我用的是Myeclipse 5.5 M2,Hibernate是里面自带的Hibernate 3.0。

这样会给我带来一个问题,我的程序的结构是: biz layer, dao layer,采用spring+hibernate,我本来是认为,事务在biz layer控制,采用spring的事务管理机制,但是,由于spring把事务代理给了Hibernate事务,而Hibernate事务是用session完成的,这样事务提交后,数据还是没有写道数据库里面去,实际上,我怀疑事务根本没有起作用,因为提交事务的那个Hibernate session很可能不是最后调用dao的方法里面实际用的session。我的session是通过ThreadLocal管理的,也就是Myeclipse向导帮忙的代码。

各位给我分析分析,之前从来没有玩过java,所以请不要笑话我的问题。
...全文
572 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yougucao379548695 2008-09-07
  • 打赏
  • 举报
回复
那是你没有提交!
finan861008 2008-09-06
  • 打赏
  • 举报
回复
使用
<bean id="DAO" class="com.dao.ComDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>


<bean id="combo" class="com.bo.ComBo"></bean>
finan861008 2008-09-06
  • 打赏
  • 举报
回复
<!--获取hibernate工厂-->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation"
value="classpath:hibernate.cfg.xml">
</property>
</bean>

<!-- 事务处理 -->
<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="get*" propagation="SUPPORTS"
read-only="true" />
<tx:method name="load*" propagation="SUPPORTS"
read-only="true" />
<tx:method name="find*" propagation="SUPPORTS"
read-only="true" />
<tx:method name="search*" propagation="SUPPORTS"
read-only="true" />
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="bizMethods"
expression="execution(* .*.*(..))" /><!--此处写上你要调用数据操作的BO层包(com.bo)-->
<aop:advisor advice-ref="txAdvice" pointcut-ref="bizMethods" />
</aop:config>
hl_ghost 2008-08-29
  • 打赏
  • 举报
回复
spring和hibernate我不是很明白,但是用过。
第一:你既然要用编程式事务,那和spring有什么关系,直接Transaction begin,comimt就OK了。
第二:你要是用的声明式事务,那就不要在程序里Transaction!而是在applicationContext.xml配
//你所的DAO必须注入同一个sessionFactory
//声明事务管理器
<bean id="transactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
//声明事务
<bean id="业务对象代理"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="transactionManager"></property>
<property name="target" ref="业务对象" />
<property name="transactionAttributes">
<props>
<prop key="添加要声明事务的方法">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧