如何解決 hibernate 自動更新實(shí)體類的問題_第1頁
如何解決 hibernate 自動更新實(shí)體類的問題_第2頁
如何解決 hibernate 自動更新實(shí)體類的問題_第3頁
如何解決 hibernate 自動更新實(shí)體類的問題_第4頁
如何解決 hibernate 自動更新實(shí)體類的問題_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

如何解決hibernate自動更新實(shí)體類的問題

如何解決hibernate自動更新實(shí)體類的問題

示例:

Java代碼僉

1.GrabOrdergrabOrder=(GrabOrder)this.grabOrderDao.getCurrentSess

ion().get(GrabOrder.class,grabOrderid);

2.grabOrder.setNickname(TimeHWUtil.getCurrentDateTime());

上述代碼會執(zhí)行兩條SQL:

查詢和更新

為什么會更新呢?我明明沒有調(diào)用DAO的update方法?。。?!

但是這里我調(diào)用了實(shí)體類的setter方法,

hibernate有一個機(jī)制Hibernatedirty-checks,會同步session緩存和數(shù)據(jù)庫的數(shù)

據(jù)

如何解決自動更新的問題:

方案一:把實(shí)體類由持久態(tài)變?yōu)槊摴軕B(tài)(游離態(tài))

Java代碼僉

1.this.grabOrderDao.getCurrentSession().evict(grabOrder);

缺點(diǎn)懶加載的對象無法加載,因?yàn)榇藭rsession相當(dāng)千close了

而且會報(bào)錯org.hibernate.LazylnitializationException:couldnotinitializeproxy-no

Session

報(bào)錯的代碼:

Java代碼僉

1.this.grabOrderDao.getCurrentSession().clear();

2.System.out.println(grabOrder.getHouseinfo().getHouseOwner

().getid());

更好的操作步驟.

(1)先把要訪問的屬性加載出來,可以通過提前使用,或者Hibernate.initialize(dept)

(2)再調(diào)用evict方法或clear方法

什么叫提前仗用呢?即提前調(diào)用getter方法

正確

Java代碼僉

1.System.out.println(grabOrder.getHouselnfo().getHouseOwner().getld

());

2.this.grabOrderDao.getCurrentSession().clear();

3.System.out.println(grabOrder.getHouseinfo().getHouseOwner

().getid());

方案二:把實(shí)體類變?yōu)橹蛔x

Java代碼僉

1.this.grabOrderDao.setReadOnly(grabOrder,readonly);

但是這招不是萬靈藥,有例外:

Unidirectionalone-to-manyandmany-to-many

Hibernatetreatsunidirectionalone-to-manyandmany-to-many

associationsownedbyaread-onlyentitythesameaswhen

ownedbyanentitythatisnotread-only.

修改單向的對多和多對多的成員變盤時,依然會觸發(fā)hibernate的自動更新.

有什么萬全之策呢?

(a)采用讀寫分離把操作放在只讀的數(shù)據(jù)庫連接中

(b)采用只讀事務(wù)

當(dāng)方法名是updateTestLa芍時會自動更新

但是我修改方法名為9etTestL釭y時,就不會自動更新了

為什么呢?看看spring事務(wù)配置

個`VIII?IIV口3匕·U丿上口y上-:1vu,uuv·,,個·',`\??II尸ll=^=`.......""\ti....,.....`

*com.hhouse.ujiayigou.service.,*·*(..))11execution(public

*com.house.ujiayigou.timer.pojo.*·*(..))11execution(public

*oa.dao.responsibility.·*·*(..))IIexecu扛on(public

*oa.web.controller.responsibility..*·*(..))11execu扛on(public

*mon.dao.generic..*,*(,,))"/>

<aop:advisorpointcut-ref="bussinessService"advice-ref="txAdvice"/>

</aop:config>I

<aop:aspectj..:'autoproxyproxy-target-class="true"/>

<tx:adviceid="txAdvice"transaction-manager="txManager">

<tx:attributes>

<tx:methodnam+“qet*”lead-only=''true”/>只讀

<tx:methodname="query*"read-only="true"/>

<tx:methodname="build*"read-only="true"/>

<tx:methodname="count*"read-only="true"/>

<tx:methodname="find*"read-only="true"/>

<tx:methodname="test*"read-only="true"/>

<tx:methodname="is*"read-only="true"/>

<tx:methodname="show*"read-only="true"/>

<tx:methodname="convert*"read-only="true"/>

<tx:methodname="delete*"propagation="REQUIRED"/>

<tx:method

::::::比$~:i::::::工f*;$$;:!$芷I1五茹霖甘忱:/>

<tx:methodname="add*"propagation="REQUIRED"/>

-.十V?...^+K^,,...-...^一”^,,;+心”.....^...-“~+;^...一”0cn11T0cn11,....

只讀的對象不保險(xiǎn),所以我們使用只讀的事務(wù)或只讀的數(shù)據(jù)庫連接.

如何解決json序列化時,自動加載lazy對象導(dǎo)致對象多層嵌套的問題?

使用Sill\l\pleBea八Pr-ope叨Filter過濾不需要的字段

Java代碼僉

1./***

2.

3.*@paramxpath:參考www.rodl/kunlunsoft/util/objectxpa

th/ObjectXpath.java

4.*@return

5.*/

6.publicStringtoJson(Stringcolumn,String...xpath){

7.if(this.result==null){//modifiedbyhuangweii@2015-0

8-17

8.System.out.println("this.resultisnull");

9.}else{

10.if(this.result!=false){

11.//this.errorMessage=null;

12.this.setErrorMessage(null);

13.}

14.

15.}

16.if(ValueWidget.isNullOrEmpty(xpath)

17.11ValueWidget.isNullOrEmpty(xpath[0])){

18.returnHWJacksonUtils.getJsonP(this);

19.}

20.

21.//finalObjectXpathoxp=newObjectXpath(www.482223.co

m);

22.intlength=xpath.length;

23.IIfinalObject[]filterObjects=newObject[length];

24.ListfilterObjList=newArraylist();

25.for(inti=0;i<length;i++){

26.Objecto=XPathPcess(this.getValue(),xpath

[i]);

27.if(oinstanceofList){

28.filterObjList.addAll((List)o);

29.}else{

30.filterObjList.add(o);

}

31.

32.//filterObjects[i]=o;

33.}

34.finalObject[]filterObjects=filterObjlist.toArray();

35.returnHWJacksonUtils.getJsonP(this,newDefaultJsonFilte

rDecide(){

36.@Override

37.publicbooleanisFilteColumn(Objectpo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論