`
jimmy.shine
  • 浏览: 396258 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate Notes

阅读更多
在收集整理资料时,发现原来研究Hibernate时写下的笔记,发出来与大家共享。
  1. 在进行级联操作的设计时,在一般情况下,不应当使用级联。在以下情况下可以使用级联。

    1)类属性完全依赖于类。如:

    public class Document{

    //附件完全依赖于文档,即文档删除后附件不再存在

private Set Attachments;

......

    }

    public class Attachment{

private String id;

private String name;

......

}

2)确认需要通过文档操作其类属性的值的。如

public class Category{

private Set Document;

......

}

public class Document{

private String id;

private String name;

}

需要进行如下操作的:

//取得分类

Category category=getHibernateTemplate().get(Category.class,0);

Set documents=category.getDocuments();

Documents document=(Document)documents.iterator().next();

document.setName(“Jimmy”);

//保存

getHibernateTemplate().update(category);

即为需要通过分类操作文档的属性值,可以根据需要设置cascade属性,一般不推荐进行这种操作。


2.对于特定类型的类映射的说明

char 类型映射到数据库中为char(1)类型,但是会在取值时出现

exception setting property with CGLIB异常

int 类型经过Hiberante的映射成int类型后,在数据库中会有默认值0,如果手动对数据库中的数据进行操作,一定要加上值0,否则会在取值的时候产生

exception setting property with CGLIB异常


3.关于延迟加载的使用

对于是否使用延迟加载,应当引起注意。

从性能上考虑,应当完全使用延迟加载,这也是从Hibernate3之后,hibernate开发小组,将延迟加载的机制从原来的不使用延迟加载改为延迟加载的原因。

从使用JDBC操作来看,对于所有的对象都是使用的延迟加载的,因为只是从数据库中取出了自己需要的数据。而从面向对象的角度来说,似乎拿到一个对象,理所当然应当是得到其属性的值,不管其为本身是一个对象还是单一的属性。而事实上,在实际操作中,应当鼓励使用延迟加载,除非是迫不得已的情况下,我们才使用不延迟加载。

事实证明,不使用延迟加载对于性能的影响是巨大的,尤其是其中的属性是集合时,最可怕的就是,其属性的类中,还是未使用的延迟加载,这有点类似于多米诺骨牌,一连串的取出来。

但是使用延迟加载又会存在一个问题,尤其是取集合的时候,会有这样的问题,比如说我们在拿到文档的时候,同进肯定要拿到附件,而我们使用了如下的HQL语句:

From Document where type='k'

这种查出来的,仅仅只是文档,不会拿到附件(但是事实上,根据hibernate)的延迟机制,拿到的是附件的id,当然,我们可以再根据id一个一个去拿一次,但是这种方法是不可取的,因为这违背了面向对象设计的原则。但是事实上,我们只可以居中去选择。

如果我们属性是完全依赖于对象的,那么,我们可以不要使用延迟加载,若不是完全依赖的话,如category与document的关系,我们应当使用延迟加载。


分享到:
评论

相关推荐

    hibernate(notes)

    【标题】:Hibernate 教程笔记 【描述】:Hibernate 是一个开源的Java持久化框架,它简化了数据库与Java应用程序之间的交互。本教程笔记将深入探讨Hibernate的核心概念、配置、对象关系映射(ORM)以及操作数据库的...

    Ajax-Notes.zip

    Ajax-Notes.zip,crud应用程序,使用spring、hibernate、junit、ajax,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建动态网页,其中网页的小部分在不重新...

    spring-boot-mysql-rest-api-tutorial:使用Spring Boot,Mysql,JPA和Hibernate构建Restful CRUD API

    Spring Boot,MySQL,JPA,Hibernate Rest API教程使用Spring Boot,Mysql,JPA和Hibernate为简单的记笔记应用程序构建Restful CRUD API。要求Java-1.8.x Maven-3.xx MySQL的-5.xx设定步骤1.克隆应用程序git clone ...

    CS-Notes-master.zip

    4. **框架和库**:Java有众多流行框架,如Spring用于企业级应用开发,Hibernate用于对象关系映射,Maven或Gradle用于构建管理,以及JUnit用于单元测试等。笔记可能涵盖这些工具的使用方法和最佳实践。 5. **实战...

    spring_liu_MyNotes_sample

    该应用程序模拟了一个简单的便签管理器(Notes Manager),用户可以在此应用中添加、查看和删除便签。虽然我们对应用程序的功能性不做过多关注,但通过构建这样一个应用程序,读者可以学习到以下关键知识点: #### ...

    Spring iBatis Learning Notes

    Java JDBC作为低级别的API,在实际应用中存在诸多不便之处,因此业界尝试通过多种方式对其进行增强,比如EJB、JDO、Hibernate、Toplink(来自Oracle)、iBatis、SQL Executor以及Spring JDBC支持等技术。 #### 二、...

    Java Professional Notes

    13. 开源框架:了解并能够使用常见的Java开源框架,如Spring、Hibernate等,理解它们的工作原理和应用场景。 在碎片化时间里,通过参考这些Java编程主题和具体代码,可以有效提高Java编程技能。这些知识点覆盖了从...

    Notes-App-Backend

    开发者可能使用JDBC(Java Database Connectivity)或者ORM(Object-Relational Mapping)框架如Hibernate来处理数据库操作。 6. **JSON**:JSON(JavaScript Object Notation)是数据交换的常用格式,适合于前后端...

    learning-notes:学习一些东西

    notes分布式1.Lambda表达式Java基础JVM设计模式数据库并发微服务消息队列1.RabbitMq缓存1.Redis集群方式(主从复制,哨兵模式和Redis-Cluster集群)2.Redis内存回收机制3.Redis笔记4.Redis Cluster原理5.Redis锁6....

    Java_Architect_Notes-Balaji.rar_java architect

    4. **框架与库**:对Spring框架的深入理解,包括依赖注入、AOP(面向切面编程)、Spring Boot、Spring Cloud等,以及MyBatis、Hibernate等持久层框架的使用,能够帮助架构师构建高效、可维护的系统。 5. **微服务...

    Notes

    11. **Java库和框架**:Spring框架用于企业级应用开发,Hibernate是流行的ORM(对象关系映射)框架,JUnit是进行单元测试的工具。 12. **Java新特性**:Java从Java 8开始引入了lambda表达式、Stream API等新特性,...

    My_cool_notes

    11. **Java EE**:如果是进阶学习,可能还会涉及到Servlet、JSP、JDBC、EJB、Spring、Hibernate等企业级开发框架。 以上就是围绕"Java"标签和"My_cool_notes"主题可能涵盖的一些核心知识点,对于初学者或希望深化...

    Notes for Alfresco

    此外,Alfresco还支持即插即用的面向方面的架构设计,利用如Spring、Hibernate、Lucene、MyFaces、JSR168、JSR170以及JSE5等开放标准技术。 #### 二、Alfresco的可扩展性 在评估企业内容管理系统时,可扩展性是一...

    401java-reading-notes

    8. **数据库编程**:SQL基础、JDBC、连接池、ORM框架(如Hibernate、MyBatis)的使用。 9. **Java标准库**:常用类库的介绍和实际应用,如集合框架、日期时间处理、I/O流、文件操作等。 10. **实战项目**:可能...

    一篇大学毕业设计的开题报告

    在对比了Lotus Notes、Exchange Server、Windows .Net框架和JAVA等技术手段后,我们可以看到JAVA在大规模数据处理和安全性方面的优势,以及Struts和Hibernate在Web应用开发中的实用性。通过这两者的结合,有望构建出...

    中国移动业务管理系统 带详细注释

    用户名和密码均为:admin -The system uses struts+ Spring+ Hibernate framework, focusing on the three combined application development, all have detailed source notes, for beginners to students without...

    apache-tomcat-7.0.55

    `RELEASE-NOTES` 文件包含了Apache Tomcat 7.0.55版本的具体改进、修复的bug和新增功能。它是了解此版本更新内容的重要参考资料。 `RUNNING.txt` 文件提供了关于如何启动、配置和管理Tomcat服务器的指南。这对于...

    android-notes-app-backend:使用Java for Android及其Spring Boot REST API制作的Notes应用程序

    在本项目中,“android-notes-app-backend”是一个使用Java语言开发的Android笔记应用的后端部分,结合了Spring Boot框架来构建RESTful API服务。这个应用的主要目标是为Android客户端提供数据存储和检索功能,使...

    Spring-Boot---API-With-Mysql-and-Hibernate

    创建Mysql数据库创建数据库notes_app 3.根据您的安装更改mysql用户名和密码打开src/main/resources/application.properties 根据您的mysql安装更改spring.datasource.username和spring.datasource.password 4.使用...

    javaNotes

    11. **框架**:如Spring、MyBatis、Hibernate等流行框架简化了开发工作,理解它们的工作原理和使用方法,可以提高开发效率。 在"javaNotes-main"这个目录下,可能包含了以上各个主题的详细脑图,每个脑图作为一个...

Global site tag (gtag.js) - Google Analytics