成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

層層解析Hibernate中的事務的濫用

開發 后端
本文從四個方面來講述Hibernate事務的濫用,結合具體實例,告訴您Hibernate中事物的應用場景。

Hibernate事務的使用:

一、要使用事務?

事務是單個的工作單元。如果某一事務成功,則在該事務中進行的所有數據修改均會提交,成為數據庫中的***組成部分。如果事務遇到錯誤且必須取消或回滾,則所有數據修改均被清除。
(查詢中一般可以不用事務!除非查詢和修改是合成一個事務的操作)

二、不用事務?(今天重點說這里)
Hibernate每次都更新數據庫,并且使用了。
1、Hibernate事務會自動更新緩存。其意思是指,緩存中查出來的所有對象(一個事務內),都判斷對象是否被更新。如果更新了,Hibernate會自動更新數據庫。

事務開始.

假設我現在查出所有用戶,并對某些用戶進行了操作,但這些操作我不想更新數據庫,也就是我只是操作緩存,來計算他們的獎金。

計算完成獎金后,該方法結束。

事務結束.

以上操作的結果是,數據庫記錄被更新了。因為在一個事務里,但其實我只是想試操作用戶的數據而不想更新。但為什么更新了,這就要問Hibernate了,對是這家伙干的好事,Hibernate發現查出了所有用戶的List,并把所有用戶都放在Hibernate緩存中了。如果在一個事務中,你對該List里的用戶操作了,并且他發現了你的操作,他會自動更新數據庫。

但我現在不想讓他更新數據庫,并且我的計算獎金算法看上去沒有必要用事務。是的他根本沒有必要用試務,因為他不更新,不保存,他只是算獎金。

所以解決這個問題的方法就是不要用管理器中對該Service進行管理.

現在想想為什么我們不用事務,Hibernate就不自動更新數據庫了?原因很簡單,因為當我們查出所有用戶之后Hibernate還做了件事,Session.close();
當他調用了Session.close()方法時,我們查詢的List就變成了游離對象了,這時該List已不在Hibernate緩存中,這時你可以方便的設置和更新了,只不手動設用Update

Hibernate是不會幫你更新的^_^。當然也可以使用evict方法把對象變為游離。

呵呵,可是在一個事務中,就算你把他變成游離,Hibernate還是會自動更新的。(我試過)不過估計Hibernate應該有設置在一個事務內不自動更新的參數吧?

三、Hibernate事Spring事務配置說明:

我下面用的是[指定對滿足哪些beanname的bean自動生成事務代理],這里看清楚點是name,也就是說這樣寫:
userInfoService
表示在Spring上下文中有userInfoService實例,并且這個實例必需對應這樣一個接口UserInfoService,這時Spring才會自動為其配置Hibernate事務,否則會報錯

[org.springframework.beans.TypeMismatchException:Failedtoconvertpropertyvalueoftype[$Proxy14]torequiredtype],錯誤的意思是找不到對應的接口。

四、下面是我的Spring配置文件

com/insurance/model/base/UserInfo.hbm.xml com/insurance/model/base/Base.hbm.xml com/insurance/model/base/AdminInfo.hbm.xml com/insurance/model/base/CompanyInfo.hbm.xml com/insurance/model/base/BxCom.hbm.xml com/insurance/model/base/XzInfo.hbm.xml com/insurance/model/base/ClientInfo.hbm.xml com/insurance/model/base/UserGrade.hbm.xml com/insurance/model/base/UserMoneyLog.hbm.xml com/insurance/model/base/SxBdInfo.hbm.xml com/insurance/model/base/CxBdInfo.hbm.xml com/insurance/model/base/CarBdInfo.hbm.xml com/insurance/model/base/SelectBase.hbm.xml com/insurance/model/base/PayInfo.hbm.xml com/insurance/model/base/AwardInfo.hbm.xml ${hibernate.dialect} true ${hibernate.show_sql} org.hibernate.hql.classic.ClassicQueryTranslatorFactory ${hibernate.hbm2ddl.auto} ${hibernate.jdbc.batch_size} ${hibernate.jdbc.fetch_size} PROPAGATION_REQUIRED,readOnly PROPAGATION_REQUIRED userInfoService adminInfoService pageService companyInfoService xzInfoService baseService clientInfoService userGradeService userMoneyLogService sxBdInfoService cxBdInfoService carBdInfoService transactionInterceptor 五、下面是詳細的錯誤信息 2008-05-2309:07:22,046[org.springframework.web.context.ContextLoader]-[ERROR]Contextinitializationfailed org.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname'accountAddPay'definedinServletContextresource[/WEB- INF/classes/applicationContext.xml]:Errorsettingpropertyvalues;nestedexceptionisorg.springframework.beans.PropertyAccessExceptionsException: PropertyAccessExceptionsException(1errors);nestedpropertyAccessExceptionsare:[org.springframework.beans.TypeMismatchException:Failedtoconvert propertyvalueoftype[$Proxy14]torequiredtype[com.insurance.service.pay.AccountSellPay]forproperty'accountSellPay'] PropertyAccessExceptionsException(1errors) org.springframework.beans.TypeMismatchException:Failedtoconvertpropertyvalueoftype[$Proxy14]torequiredtype [com.insurance.service.pay.AccountSellPay]forproperty'accountSellPay' atorg.springframework.beans.BeanWrapperImpl.doTypeConversionIfNecessary(BeanWrapperImpl.java:951) atorg.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:692) atorg.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:572) atorg.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:737) atorg.springframework.beans.BeanWrapperImpl.setPropertyValues(BeanWrapperImpl.java:764) atorg.springframework.beans.BeanWrapperImpl.setPropertyValues(BeanWrapperImpl.java:753) atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1057) atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:857) atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:378) atorg.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:233) atorg.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:145) atorg.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:283) atorg.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:313) atorg.springframework.web.context.support.AbstractRefreshableWebApplicationContext.refresh(AbstractRefreshableWebApplicationContext.java:139) atorg.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:246) atorg.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:184) atorg.springframework.web.context.ContextLoaderServlet.init(ContextLoaderServlet.java:83) atjavax.servlet.GenericServlet.init(GenericServlet.java:211) atorg.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1019) atorg.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:862) atorg.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3991) atorg.apache.catalina.core.StandardContext.start(StandardContext.java:4335) atorg.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:823) atorg.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:807) atorg.apache.catalina.core.StandardHost.addChild(StandardHost.java:595) atorg.apache.catalina.core.StandardHostDeployer.install(StandardHostDeployer.java:277) atorg.apache.catalina.core.StandardHost.install(StandardHost.java:832) atorg.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:683) atorg.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:432) atorg.apache.catalina.startup.HostConfig.start(HostConfig.java:964) atorg.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:349) atorg.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) atorg.apache.catalina.core.ContainerBase.start(ContainerBase.java:1091) atorg.apache.catalina.core.StandardHost.start(StandardHost.java:789) atorg.apache.catalina.core.ContainerBase.start(ContainerBase.java:1083) atorg.apache.catalina.core.StandardEngine.start(StandardEngine.java:478) atorg.apache.catalina.core.StandardService.start(StandardService.java:476) atorg.apache.catalina.core.StandardServer.start(StandardServer.java:2298) atorg.apache.catalina.startup.Catalina.start(Catalina.java:556) atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod) atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) atjava.lang.reflect.Method.invoke(Method.java:585) atorg.apache.catalina.startup.Bootstrap.start(Bootstrap.java:284) atorg.apache.catalina.startup.Bootstrap.main(Bootstrap.java:422) 調用父類構造方法...! 2008-05-2309:07:22,656[org.apache.struts.validator.ValidatorPlugIn]-[INFO]Loadingvalidationrulesfilefrom'/WEB-INF/validator-rules.xml' 2008-05-2309:07:22,656[org.apache.struts.validator.ValidatorPlugIn]-[INFO]Loadingvalidationrulesfilefrom'/WEB-INF/validation.xml' 2008-05-2309:07:22,906[org.springframework.web.struts.ContextLoaderPlugIn]-[INFO]ContextLoaderPlugInforStrutsActionServlet'action,module'': initializationstarted 2008-05-2309:07:22,906[org.springframework.web.struts.ContextLoaderPlugIn]-[ERROR]Contextinitializationfailed org.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname'accountAddPay'definedinServletContextresource[/WEB- INF/classes/applicationContext.xml]:Errorsettingpropertyvalues;nestedexceptionisorg.springframework.beans.PropertyAccessExceptionsException: PropertyAccessExceptionsException(1errors);nestedpropertyAccessExceptionsare:[org.springframework.beans.TypeMismatchException:Failedtoconvert propertyvalueoftype[$Proxy14]torequiredtype[com.insurance.service.pay.AccountSellPay]forproperty'accountSellPay'] PropertyAccessExceptionsException(1errors) org.springframework.beans.TypeMismatchException:Failedtoconvertpropertyvalueoftype[$Proxy14]torequiredtype [com.insurance.service.pay.AccountSellPay]forproperty'accountSellPay' atorg.springframework.beans.BeanWrapperImpl.doTypeConversionIfNecessary(BeanWrapperImpl.java:951) atorg.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:692) atorg.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:572) atorg.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:737) atorg.springframework.beans.BeanWrapperImpl.setPropertyValues(BeanWrapperImpl.java:764) atorg.springframework.beans.BeanWrapperImpl.setPropertyValues(BeanWrapperImpl.java:753) atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1057) atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:857) atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:378) atorg.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:233) atorg.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:145) atorg.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:283) atorg.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:313) atorg.springframework.web.context.support.AbstractRefreshableWebApplicationContext.refresh(AbstractRefreshableWebApplicationContext.java:139) atorg.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:246) atorg.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:184) atorg.springframework.web.context.ContextLoaderServlet.init(ContextLoaderServlet.java:83) atjavax.servlet.GenericServlet.init(GenericServlet.java:211) atorg.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1019) atorg.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:862) atorg.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3991) atorg.apache.catalina.core.StandardContext.start(StandardContext.java:4335) atorg.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:823) atorg.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:807) atorg.apache.catalina.core.StandardHost.addChild(StandardHost.java:595) atorg.apache.catalina.core.StandardHostDeployer.install(StandardHostDeployer.java:277) atorg.apache.catalina.core.StandardHost.install(StandardHost.java:832) atorg.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:683) atorg.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:432) atorg.apache.catalina.startup.HostConfig.start(HostConfig.java:964) atorg.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:349) atorg.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) atorg.apache.catalina.core.ContainerBase.start(ContainerBase.java:1091) atorg.apache.catalina.core.StandardHost.start(StandardHost.java:789) atorg.apache.catalina.core.ContainerBase.start(ContainerBase.java:1083) atorg.apache.catalina.core.StandardEngine.start(StandardEngine.java:478) atorg.apache.catalina.core.StandardService.start(StandardService.java:476) atorg.apache.catalina.core.StandardServer.start(StandardServer.java:2298) atorg.apache.catalina.startup.Catalina.start(Catalina.java:556) atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod) atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) atjava.lang.reflect.Method.invoke(Method.java:585) atorg.apache.catalina.startup.Bootstrap.start(Bootstrap.java:284) atorg.apache.catalina.startup.Bootstrap.main(Bootstrap.java:422) javax.servlet.UnavailableException atorg.apache.struts.action.ActionServlet.initModulePlugIns(ActionServlet.java:880) atorg.apache.struts.action.ActionServlet.init(ActionServlet.java:336) atcom.insurance.struts.action.ActionInit.init(ActionInit.java:34) atjavax.servlet.GenericServlet.init(GenericServlet.java:211) atorg.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1019) atorg.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:862) atorg.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3991) atorg.apache.catalina.core.StandardContext.start(StandardContext.java:4335) atorg.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:823) atorg.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:807) atorg.apache.catalina.core.StandardHost.addChild(StandardHost.java:595) atorg.apache.catalina.core.StandardHostDeployer.install(StandardHostDeployer.java:277) atorg.apache.catalina.core.StandardHost.install(StandardHost.java:832) atorg.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:683) atorg.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:432) atorg.apache.catalina.startup.HostConfig.start(HostConfig.java:964) atorg.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:349) atorg.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) atorg.apache.catalina.core.ContainerBase.start(ContainerBase.java:1091) atorg.apache.catalina.core.StandardHost.start(StandardHost.java:789) atorg.apache.catalina.core.ContainerBase.start(ContainerBase.java:1083) atorg.apache.catalina.core.StandardEngine.start(StandardEngine.java:478) atorg.apache.catalina.core.StandardService.start(StandardService.java:476) atorg.apache.catalina.core.StandardServer.start(StandardServer.java:2298) atorg.apache.catalina.startup.Catalina.start(Catalina.java:556) atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod) atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) atjava.lang.reflect.Method.invoke(Method.java:585) atorg.apache.catalina.startup.Bootstrap.start(Bootstrap.java:284) atorg.apache.catalina.startup.Bootstrap.main(Bootstrap.java:422) 2008-5-239:07:23org.apache.coyote.http11.Http11Protocolstart 信息:StartingCoyoteHTTP/1.1onhttp-8080 2008-5-239:07:23org.apache.jk.common.ChannelSocketinit 信息:JK2:ajp13listeningon/0.0.0.0:8009 2008-5-239:07:23org.apache.jk.server.JkMainstart 信息:JkrunningID=0time=0/32config=D:\Tomcat5.0\conf\jk2.properties 2008-5-239:07:23org.apache.catalina.startup.Catalinastart 信息:Serverstartupin6953ms

 

您正在閱讀:層層解析Hibernate中的事務的濫用

【編輯推薦】

  1. Hibernate框架如何實現ORM
  2. Hibernate/JPA成功使用的十點心得
  3. 優化Hibernate性能的幾點建議
責任編輯:張攀 來源: javaeye論壇
相關推薦

2009-06-03 10:20:11

Hibernate事務管理配置

2009-06-30 16:41:12

Hibernate的事

2009-09-22 10:50:04

Hibernate c

2009-09-24 13:25:58

Hibernate m

2009-06-03 10:02:53

Hibernate批量刪除

2009-09-23 17:41:05

Hibernate事務

2009-09-25 12:59:53

Hibernate事務

2009-06-17 16:08:58

Hibernate C

2009-06-18 10:07:03

CriteriaHibernate

2009-06-26 16:15:04

Criteria的用法Hibernate

2009-09-25 11:27:19

Hibernate J

2009-09-22 16:49:42

Hibernate分頁

2017-01-19 15:32:36

Java全局事務本地事務

2022-04-28 13:08:51

架構師軟件

2009-09-23 15:12:41

Hibernate視圖

2009-06-16 16:27:22

Hibernate優化

2009-06-12 15:09:01

Hibernate優化

2009-06-18 09:14:08

Hibernate H

2009-06-26 10:19:00

Clob字段Hibernate

2009-09-22 15:26:30

Hibernate多表
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费av观看 | 国产视频2021 | 午夜成人免费视频 | 色99视频| 夜夜爽99久久国产综合精品女不卡 | 成人免费视频网站在线观看 | a级片在线观看 | 亚洲国产精品视频 | 日韩毛片中文字幕 | 久久久婷婷 | 亚洲一区久久 | 亚洲一区网站 | 日韩欧美在线一区 | 黄网站在线观看 | 国产免费一区 | 国产天天操 | 国产伦精品一区二区三区在线 | 国产精品第2页 | 精品一区二区三区四区 | 91九色视频在线 | 一区二区三区视频 | 亚洲精品视频在线播放 | 成人在线一区二区三区 | 福利视频二区 | 国产精品久久久av | 一区二区精品电影 | 特黄色一级毛片 | 欧美一区二区视频 | 中文字幕人成乱码在线观看 | 日韩精品1区2区3区 国产精品国产成人国产三级 | 毛片免费观看 | 欧美精品成人一区二区三区四区 | 99久久久久久99国产精品免 | 亚洲二区在线观看 | 亚洲欧洲综合av | 亚洲欧美日韩中文字幕一区二区三区 | 精品日韩在线观看 | 欧美一区二区在线观看 | 超碰精品在线观看 | 欧美中文在线 | 激情视频中文字幕 |