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

上传人:文*** 文档编号:88142736 上传时间:2023-04-22 格式:PDF 页数:5 大小:543.06KB
返回 下载 相关 举报
如何解决 hibernate 自动更新实体类的问题.pdf_第1页
第1页 / 共5页
如何解决 hibernate 自动更新实体类的问题.pdf_第2页
第2页 / 共5页
点击查看更多>>
资源描述

《如何解决 hibernate 自动更新实体类的问题.pdf》由会员分享,可在线阅读,更多相关《如何解决 hibernate 自动更新实体类的问题.pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、如何解决hibernate自动更新实体类的问题如何解决hibernate自动更新实体类的问题示例:Java代码佥1.GrabOrder grabOrder=(GrabOrder)this.grabOrderDao.getCurrentSess ion().get(GrabOrder.class,grabOrderid);2.grabOrder.setNickname(TimeHWUtil.getCurrentDateTime();上述代码会执行两条SQL:查询和更新为什么会更新呢?我明明没有调用DAO的update方法啊!但是这里我调用了实体类的setter方法,hibernate有一个机制H

2、ibernatedirty-checks,会同步session缓存和数据库的数据如何解决自动更新的问题:方案一:把实体类由持久态变为脱管态(游离态)Java代码佥1.this.grabOrderDao.getCurrentSession().evict(grabOrder);缺点懒加载的对象无法加载,因为此时session相当千close了而且会报错org.hibernate.LazylnitializationException:could not initialize proxy-no Session 报错的代码:Java代码佥1.this.grabOrderDao.getCurrentS

3、ession().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.getCurrentS

4、ession().clear();3.System.out.println(grabOrder.getHouseinfo().getHouseOwner().getid();方案二:把实体类变为只读Java代码佥1.this.grabOrderDao.setReadOnly(grabOrder,readonly);但是这招不是万灵药,有例外:Unidirectional one-to-many and many-to-many Hibernate treats unidirectional one-to-many and many-to-many associations owned by a

5、 read-only entity the same as when owned by an entity that is not read-only.修改单向的对多和多对多的成员变盘时,依然会触发hibernate的自动更新有什么万全之策呢?(a)采用读写分离把操作放在只读的数据库连接中(b)采用只读事务当方法名是updateTestLa芍时会自动更新但是我修改方法名为9etTestL釭y时,就不会自动更新了为什么呢?看看spring事务配置个VIII I IV口 3匕U丿上口y上-:1vu,uuv,个,I I尸l l=.ti.,.h*com.house.ujiayigou.service.

6、,*(.)1 1 execution(public*com.house.uj iayigou.timer.poj o.*(.)11 execution(public*oa.dao.responsibility.*(*(.)II execu扛on(public*oa.web.controller.responsibility.*(.)11 execu扛on(public*mon.dao.generic.*,*(,)/I tx:method nam+“qet*”lead-only=true”/只读 tx:method:::比$:i::::工f*;$;:!芷I1五茹霖甘忱:-十V.+K,.-.一”,

7、;心”.-“+;.一”0cn11T0cn11,.只读的对象不保险,所以我们使用只读的事务或只读的数据库连接如何解决json序列化时,自动加载lazy对象导致对象多层嵌套的问题?使用SilllpleBea八Pr-ope叨Filter过滤不需要的字段Java代码佥1./*2.3.*param xpath:参考 4.*return 5.*/6.public String toJson(String column,String.xpath)7.if(this.result=null)/modified by huangweii 2015-0 8-17 8.9.10.11./12.13.14.15.16

8、.17.18.19.20.21./m);22.23.II 24.25.26.i);System.out.println(this.result is null);else if(this.result!=false)this.errorMessage=null;this.setErrorMessage(null);if(ValueWidget.isNullOrEmpty(xpath)11 ValueWidget.isNullOrEmpty(xpath 0)return HWJacksonUtils.getJsonP(this);final ObjectXpath oxp=new ObjectX

9、path(www.482223.co int length=xpath.length;final Object filterObjects=new Objectlength;List fil terObj List=new Arraylist();for(int i=0;i length;i+)Object o=XPathParser.process(this.getValue(),xpath 27.28.29.30.31.32./33.34.final Object filterObjects=filterObjlist.toArray();if(o instanceof List)filt

10、erObj List.addAll(List)o);else fil terObj List.add(o);filterObjectsi=o;35.return HWJacksonUtils.getJsonP(this,new DefaultJsonFilte rDecide()36.37.ertyVal,38.39.Override public boolean isFilteColumn(Object pojo,Object prop String column2)if(ValueWidget.isNullOrEmpty(column)if(SystemHWUtil.isEquals(propertyVal,filter Objects)40.41.42.return true;else 43.if(SystemHWUtil.isEquals(pojo,filterObject s)&(column2.equals(column)44.return true;45.46.47.return false;48.49.);so.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁