如何解决 hibernate 自动更新实体类的问题_第1页
如何解决 hibernate 自动更新实体类的问题_第2页
如何解决 hibernate 自动更新实体类的问题_第3页
如何解决 hibernate 自动更新实体类的问题_第4页
如何解决 hibernate 自动更新实体类的问题_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

如何解决hibernate自动更新实体类的问题

如何解决hibernate自动更新实体类的问题

示例:

Java代码佥

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

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

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

上述代码会执行两条SQL:

查询和更新

为什么会更新呢?我明明没有调用DAO的update方法啊!!!

但是这里我调用了实体类的setter方法,

hibernate有一个机制Hibernatedirty-checks,会同步session缓存和数据库的数

如何解决自动更新的问题:

方案一:把实体类由持久态变为脱管态(游离态)

Java代码佥

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

缺点懒加载的对象无法加载,因为此时session相当千close了

而且会报错org.hibernate.LazylnitializationException:couldnotinitializeproxy-no

Session

报错的代码:

Java代码佥

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

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

().getid());

更好的操作步骤.

(1)先把要访问的属性加载出来,可以通过提前使用,或者Hibernate.initialize(dept)

(2)再调用evict方法或clear方法

什么叫提前仗用呢?即提前调用getter方法

正确

Java代码佥

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

());

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

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

().getid());

方案二:把实体类变为只读

Java代码佥

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

但是这招不是万灵药,有例外:

Unidirectionalone-to-manyandmany-to-many

Hibernatetreatsunidirectionalone-to-manyandmany-to-many

associationsownedbyaread-onlyentitythesameaswhen

ownedbyanentitythatisnotread-only.

修改单向的对多和多对多的成员变盘时,依然会触发hibernate的自动更新.

有什么万全之策呢?

(a)采用读写分离把操作放在只读的数据库连接中

(b)采用只读事务

当方法名是updateTestLa芍时会自动更新

但是我修改方法名为9etTestL釭y时,就不会自动更新了

为什么呢?看看spring事务配置

个`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,....

只读的对象不保险,所以我们使用只读的事务或只读的数据库连接.

如何解决json序列化时,自动加载lazy对象导致对象多层嵌套的问题?

使用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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论