`

hibernate 经验谈(一)

 
阅读更多

以前仔细研究过hibernate,现在随着项目接触,也慢慢的有所深入,下面将自己的一些新的体会发出来。


1.尽量少用one-to-many的映射,如果用请把lazy设置成true,这样在查询主表时所有关联的子表就不会查询了,更不会浪费数据库的资源。

2. 如果lazy="true"时,如果需要(用Criteria或者DetachedCriteria)查询子表对象,则会抛出一个session closed的异常,因为查询完主表对象hibernate的session就已经关闭了,所以是查询不到的,如果想要查询子表对象,请在one-to-many的设置属性fetch="join",这说明只要查询时就去抓取子对象,是hibernate的一种抓取策略。

3.如果lazy="true"并且fetch="join"时,用QBC进行分页查询,会带来新的问题,fetch="join"是采用左外连接查询的,所以主表的数据就会出现很多重复记录,这时需在QBC条件对象加上一个去重的限制,具体代码为:

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 

换句话说fetch是为子对象服务的,不适合主对象的查询操作.

4. 如果用HQL查询则一切正常,不用加去重操作,子对象也可以查询出来.

5. 如果lazy="false"时,并没有设置fetch属性,用HQL查询也会抛出一个sessin closed 异常,所以需要在HQL写上抓取子对象的关键字,例如:from main join fetch main.detail as detail,这样在获取子对象属性时就关采取抓取策略.

6. 在使用DetachedCriteria拼凑查询条件的时候,如何条件涉及到子对象的属性时,需要用DetachedCriteria.createAlias("b","b"),来建立映射关系,不然会下面这个异常

org.springframework.orm.hibernate3.HibernateQueryException: could not resolve property

假如:实体A中包含set<B>

那么在DetachedCriteria 中拼凑查询条件时,如果条件是B中的某个属性Bp1的话,那么应该通过createAlias()创建 实体A于B的关联,例:criteria.createAlias("B", "B"),那么你在添加B的查询条件的时候,add(Restrictions.eq("B.Bp1","test"));
时才不会报错,不然会报找不到属性B.Bp1,当然在设置了关联之后还会引发一个问题也就是上面提到的重复问题,因为设置关联之后hibernate是使用左外连接拼接的sql,这里的解决方案就是也需要加上上面提到的去除重复数据的代码即可.
当然添加实体之间的关联之后,会把B也加载出来,就算设置了延迟加载也没用。
说所以说为了性能 在拼凑查询条件的时候能不设置关联就不关联。



分享到:
评论

相关推荐

    Struts+Hibernate谈J2EE的数据表示.rar

    8. **最佳实践**:分享Struts+Hibernate开发中的经验,如代码组织、测试策略等。 通过学习这份文档,开发者可以深入理解如何在J2EE环境中有效地整合Struts和Hibernate,提升应用的开发效率和可维护性,同时掌握数据...

    Java项目经理的面试经验之谈

    Java项目经理的面试经验之谈 本文是JavaWeb方面的项目经理对Java工程师面试的一些想法和建议。在面试过程中,项目经理通常会通过与应聘者的交流,了解他们的项目经验、技术基础和思维方式。 首先,项目经理会让...

    Java项目经理的面试经验之谈.pdf

    Java项目经理的面试经验之谈 本文分享了一个Java项目经理在面试过程中的经验和看法,涵盖了面试的整个过程,从项目介绍到技术细节的讨论,乃至知识广度的考察。文章全文围绕面试的五个环节展开,分别是项目介绍、...

    Java项目经理的面试经验之谈.docx

    - **框架应用**:熟悉Spring Boot、Hibernate、MyBatis等常用Java开发框架。 - **数据库管理**:掌握SQL语言,了解关系型数据库如MySQL、Oracle的使用。 - **分布式系统**:理解微服务架构、负载均衡、分布式缓存...

    浅谈Java语言评价胜出的8大技术优势

    此外,Java拥有庞大的社区支持,为学生提供了一个交流学习经验、解决问题的良好环境。这种学术界的支持有助于培养新一代程序员,促进Java语言的持续发展。 #### 4. 内存管理 与C++相比,Java具有更先进的内存管理...

    浅谈java!

    - **ORM映射**:使用Hibernate框架进行对象关系映射。 - **依赖注入**:掌握Spring框架的DI与AOP技术。 - **Web服务**:了解SOAP与RESTful服务的实现方法。 - **Ajax与XML**:学习异步请求处理与XML数据交换技术。 ...

    一线大厂金三银四面试资料.zip

    "一线大厂金三银四面试资料.zip" 这个标题暗示了这是一个专门为准备在招聘高峰期——通常被称为“金三银四”(三月和四月)应聘一线大厂(如阿里巴巴、腾讯、百度等知名互联网公司)的求职者准备的面试资源集合。...

    一个牛人给java初学者的建议

    #### 浅谈Java及其应用 Java自诞生以来,已经成为全球范围内广泛使用的编程语言之一。对于初学者而言,理解Java的基础知识及其应用场景至关重要。 ### Java语言简介 Java是一种面向对象的语言,其设计初衷是为了...

    JAVA自学之路

    首先我要恭喜你,遇见问题,意味着你又有涨经验的机会了,每解决一个问题,你的JAVA经验值就应该上升几百点,问题遇到的越多,知识提升的越快。 但是总是解决不了也是很恼人的,怎么办呢? 我一般要求我们的...

    浅谈计算机软件开发的JAVA编程语言.zip

    此外,开源社区为Java提供了无数的第三方框架和库,如Spring用于企业级应用开发,Hibernate用于对象关系映射,以及JUnit用于单元测试等,这些都极大地提升了开发者的生产力。 Java还有一套完善的开发工具,例如...

    (完整版)Java系统架构师面试题 (2).docx

    Hibernate是一个对象关系映射框架,适用于持久层实现。 3. 对于J2EE方面开发的设计模型 J2EE方面开发可以分为前端和后端两部分。前端可以使用MVC模式,Axis、Ext、JQuery、Flex等框架来实现;后端可以使用Ejb、...

    Java面试简历项目及模板

    一份精心准备的简历和具有说服力的项目经验能够大大提升你的竞争力。下面将详细讨论如何构建一个突出的Java面试简历以及如何展示项目经验。 首先,让我们从简历的结构和内容谈起。一个好的Java简历应该包括以下几个...

    java开发工程专业实习结业报告.rar-计算机程序专业-结业报告

    谈到未来的打算和职业规划,一位Java开发工程师可能会考虑在某一特定领域深化,如大数据处理(Hadoop、Spark)、云计算平台(如AWS、Google Cloud或Azure)、移动应用开发(Android或iOS)或者前端框架(React、Vue....

    Java面试宝典2014版 面试宝典

    框架应用部分,可能会涉及Spring、Hibernate、MyBatis等常用框架的工作原理和使用方法,以及如何在面试中展示自己的框架实战经验。 数据库管理也是Java开发者面试常谈的话题。书中可能会讲解SQL查询优化、事务处理...

    软件工程生产实习报告.txt

    最先在内部系统组参与内部管理系统开发(struts+mysql+spring+hibernate),之后是去做网络交换机软件的脚本测试。现在又回归内部系统,虽然在脚本组期间,编码能力被别人甩在后头,但至少具有了一些测试经验。 至少...

    Java版水果管理系统源码-java:Java

    可以说是笔者多年开发经验沉湎. obase-webc: 基于COC的MVC, 无web.xml启动, 很好支持前后端分离. 用户基于原生HttpServlet API开发. obase-mysql: 一套使用Annotation+ASM实现hibernate + mybatis优势功能的ORM框架....

    文献检索实验报告

    在IT领域,特别是Java Web技术专业,文献检索是获取最新研究、技术发展和实践经验的重要手段。本实验报告将详细介绍如何利用不同的检索工具和策略,以Java Web技术的应用、发展和介绍为主题,查找相关文献资料。 ...

    java面试技巧及笔试汇集

    SSH(Spring、Struts、Hibernate)是经典的Java企业级开发框架,面试中可能会涉及Spring的依赖注入、AOP、MVC模式,Struts的Action、Result、Interceptor,以及Hibernate的ORM映射和SQL操作。 九、数据库 1. SQL...

    technicalBlogApplication

    《深入解析technicalBlogApplication——基于Java的技术博客应用》 在当今信息化时代,技术博客平台已经成为开发者、技术爱好者...无论是对于初学者还是经验丰富的开发者,深入研究这个项目都将是一次宝贵的学习经历。

Global site tag (gtag.js) - Google Analytics