`
wgx198302
  • 浏览: 31260 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate笔记

阅读更多
1.org.hibernate.MappingException: Unknown entity: Xxx
没有在hibernate.cfg.xml中定义类Xxx对应的Xxx.hbm.xml位置.

2.org.hibernate.HibernateException: Hibernate Dialect must be explicitly set
没有指定hibernate.cfg.xml位置,

new Configuration().configure()默认指定为hibernate.cfg.xml

Configuration c = new Configuration().configure();
SessionFactory sf = c.buildSessionFactory();

3.load()/get()区别
load先查缓存如果缓存中存在就直接返回缓存中的ID对应的对象;
如果缓存中不存在就判断lazy;
如果lazy = true,则不报任何异常,继续执行下面代码,而在下面访问该对象属性的时候,如果数据库中记录不存在就会抛出org.hibernate.ObjectNotFoundException异常,如果数据库中记录存在,则返回相应记录;
如果lazy = false, 则直接查询数据库,如果数据库中记录不存在则抛出异常org.hibernate.ObjectNotFoundException: No row with the given identifier exists,如果数据库中记录存在,则返回相应记录

get()方法如果找不到记录将返回null,但也可能抛出ObjectNotFoundException异常(如先load后get)

举例:

load取缓存中数据

Person p1 = (Person)s.load(Person.class, "00004");//取不到缓存中数据,lazy = true ,不执行sql,所以不出异常
Person p2 = (Person)s.load(Person.class, "00004");//查询缓存,得到数据,不执行sql,不出异常
System.out.println(p1==p2);//结果是true,因为p1,p2是缓存中同一个对象
延迟加载1

Person p1 = (Person)s.load(Person.class, "00004");//取不到缓存中数据,lazy = true,不执行sql,所以不出异常
Person p2 = (Person)s.load(Person.class, "00004");//取到缓存中数据,不出异常
    System.out.println(p1==p2);//结果是true,因为p1,p2是缓存中同一个对象
System.out.println(p1.getUserName());//访问p1属性,执行sql,加载p1,数据库中不存在记录,则抛出ObjectNotFoundException异常
延迟加载2

Person p1 = (Person)s.load(Person.class, "00004");//取不到缓存中数据,lazy = true,不执行sql,所以不出异常
Person p2 = (Person)s.load(Person.class, "00004");//取到缓存中数据,不出异常
    System.out.println(p1==p2);//结果是true,因为p1,p2是缓存中同一个对象
System.out.println(p2.getUserName());//访问p2属性,执行sql,加载p2,数据库中不存在记录,则抛出ObjectNotFoundException异常
get方法直接访问数据库1

Person p1 = (Person)s.get(Person.class, "00004");//执行sql,如果记录不存在,返回空指针null
Person p2 = (Person)s.load(Person.class, "00004");//取不到缓存中数据,lazy = true ,不执行sql,所以不出异常
    System.out.println(p1==p2);//结果是false
System.out.println(p1.getUserName());//p1记录为null,抛出空指针异常
get方法直接访问数据库2

Person p1 = (Person)s.get(Person.class, "00004");//执行sql,如果记录不存在,返回空指针null
Person p2 = (Person)s.load(Person.class, "00004");//取不到缓存中数据,lazy = true ,不执行sql,所以不出异常
    System.out.println(p1==p2);//结果是false
System.out.println(p2.getUserName());//访问p2属性,执行sql,加载p2,数据库中不存在记录,则抛出ObjectNotFoundException异常
load方法1

Person p1 = (Person)s.load(Person.class, "00004");//取不到缓存中数据,lazy = true ,不执行sql,所以不出异常
Person p2 = (Person)s.get(Person.class, "00004");   //查缓存获得p1_proxy,访问p1属性,执行sql,加载p1,数据库中不存在记录,则抛出ObjectNotFoundException异常????还是使用p1时的proxy
   System.out.println(p1==p2);//不执行,其实p1,p2是一个对象
System.out.println(p1.getUserName());//不执行
  load方法2

Person p1 = (Person)s.load(Person.class, "00004");//取不到缓存中数据,lazy = true ,不执行sql,所以不出异常
Person p2 = (Person)s.get(Person.class, "00004");   //查缓存获得p1_proxy,访问p1属性,执行sql,加载p1,数据库中不存在记录,则抛出ObjectNotFoundException异常????还是使用p1时的proxy
   System.out.println(p1==p2);//不执行,其实p1,p2是一个对象
System.out.println(p2.getUserName());//不执行Person p1 = (Person)s.load(Person.class, "00004");//取不到缓存中数据,lazy = true ,不执行sql,所以不出异常
Person p2 = (Person)s.get(Person.class, "00004");   //查缓存获得p1_proxy,访问p1属性,执行sql,加载p1,数据库中不存在记录,则抛出ObjectNotFoundException异常????还是使用p1时的proxy
   System.out.println(p1==p2);//不执行,其实p1,p2是一个对象
System.out.println(p1.getUserName());//不执行
  get方法

Person p1 = (Person)s.get(Person.class, "00004");//返回null
Person p2 = (Person)s.get(Person.class, "00004");   //查缓存获得p1
   System.out.println(p1==p2);//p1,p2是一个对象
System.out.println(p2.getUserName());//空指针异常
上面都是访问非主键属性,如果是访问主键的话是不会真正去查询数据库的,因为本身'00004'已经放在了缓存中.

4:org.hibernate.InvalidMappingException: Could not parse mapping document from resource com/example/datamodel/Person.hbm.xml
hbm.xml中类路径应写全

5:org.hibernate.HibernateException: More than one row with the given identifier was found: 000002, for class: com.example.datamodel.Person
记录不唯一不能使用load

6:
临时状态 new Person(),new Person('aaa','000');
持久状态
游离状态 关闭


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lsj19830812/archive/2008/01/16/2046810.aspx
分享到:
评论

相关推荐

    hibernate笔记.txt

    在深入探讨《hibernate笔记.txt》所提及的关键知识点前,我们先来解析一下标题和描述中的核心概念。“自上而下的依赖,单向依赖,层与层之间最好依赖抽象”,这一描述实际上触及了软件架构设计中的关键原则,特别是...

    韩顺平.2011版.hibernate笔记.zip

    《韩顺平.2011版.hibernate笔记》是一份针对Hibernate框架的详细学习资料,由知名IT讲师韩顺平在2011年编撰而成。Hibernate是Java开发领域中广泛使用的对象关系映射(ORM)框架,它极大地简化了数据库操作,使开发者...

    传智播客 hibernate笔记(word+pdf+源码)

    【传智播客 Hibernate 笔记】是一份深入学习 Hibernate ORM 框架的资源集合,包括了 word 笔记、pdf 讲义、源代码以及相关分析图表和 jar 包,旨在帮助开发者全面理解并掌握 Hibernate 的核心概念与实际应用。...

    Hibernate笔记完整版

    《Hibernate笔记完整版》 在Web开发领域,Hibernate作为三大框架之一,扮演着至关重要的角色。本文将全面介绍Hibernate,包括其数据持久化的概念、优缺点对比,以及Hibernate的核心概念和编程步骤。 对象持久化是...

    韩顺平hibernate笔记

    《韩顺平Hibernate笔记》是一份详尽记录了著名IT讲师韩顺平关于Hibernate框架讲解内容的资料集合。Hibernate作为Java领域中广泛使用的对象关系映射(ORM)框架,极大地简化了数据库操作,使得开发者可以更加专注于...

    韩顺平Hibernate笔记

    《韩顺平Hibernate笔记》是一份详尽的关于Hibernate框架的学习资料,由知名IT教育专家韩顺平编撰。Hibernate是Java开发中的一个强大的对象关系映射(ORM)框架,它简化了数据库与Java对象之间的交互,使得开发者可以...

    hibernate笔记

    本笔记将深入探讨 Hibernate 的核心概念、配置、实体映射、查询语言及缓存机制。 1. **核心概念** - **对象关系映射(ORM)**: Hibernate 提供了一种桥梁,将 Java 对象与数据库中的记录关联起来,使得开发者可以...

    Hibernate,hibernate笔记

    Hibernate 是一个开源的对象关系映射(ORM)框架,它允许Java开发者使用面向对象的方式来操作数据库。这个框架将数据库操作转化为对Java对象的操作,简化了数据持久化的复杂度。以下是对Hibernate的一些关键知识点的...

    尚学堂hibernate笔记

    ### 尚学堂Hibernate笔记知识点详解 #### 一、项目初始化与环境搭建 1. **新建项目**:在IDE中创建一个新的Java项目。 2. **构建用户库并添加所需的JAR包**: - 右键点击项目 -> `Build Path` -> `Configure ...

    hibernate笔记.pdf

    hibernate笔记.pdf

    韩顺平hibernate笔记及图解

    总结起来,"韩顺平hibernate笔记及图解"涵盖了Hibernate的基础概念、核心组件、对象关系映射、查询机制、事务管理以及实体间的关系等内容。通过学习这份笔记,开发者能深入理解Hibernate的工作原理和使用技巧,提升...

    Spring+Hibernate笔记

    【Spring+Hibernate笔记】这篇文档主要涵盖了在Web开发中使用Spring和Hibernate的基础知识。首先,我们从Spring的Hello World开始,了解如何配置JSP运行环境。 1.1. 配置JSP运行环境是开发Web应用的第一步。这包括...

    马士兵hibernate笔记

    【马士兵Hibernate笔记】是一份面向初学者的教程,旨在帮助读者深入了解Hibernate这一持久化框架。Hibernate是一个基于Java的ORM(对象关系映射)工具,它允许开发者将数据库操作转换为面向对象的方式,从而简化了...

Global site tag (gtag.js) - Google Analytics