day35_hibernate懒加载&抓取策略&常见错误分析

来源:互联网 发布:php扩展库有哪些 编辑:程序博客网 时间:2024/05/20 16:09

lazy

需要数据的时候才要加载

懒加载的概念

这里写图片描述

类的懒加载

这里写图片描述

session.load方法产生的是代理对象,该代理类是持久化类的子类

集合的懒加载

set的延迟加载:

   true   false   extra

说明:
- 1、因为延迟加载在映射文件设置,而映射文件一旦确定,不能修改了。
- 2、延迟加载是通过控制sql语句的发出时间来提高效率的。

manytoone的懒加载
  对于性能来说,没有什么影响,所以随便怎么样都行

抓取策略

这里写图片描述

   join:左外连接   select:默认的值   subselect:子查询

说明:
1、因为抓取策略的设置在映射文件中,所以一旦映射文件生成就不能改变了。
2、通过发出怎么样的SQL语句加载集合,从而优化效率的。

查询

hql语句

单表

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

结果为Long类型的数据,该表的总的行数

一对多

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

Criteria查询

sql查询

查询的技术路线

这里写图片描述

错误分析

错误1

这里写图片描述

该Person在hibernate的映射文件中没有找到:

 1、在hibernate的配置文件中没有加载相应的映射文件 2、也有可能是客户端的session的操作的对象在映射文件中找不到

错误2

这里写图片描述

错误3

这里写图片描述

当在hibernate内部生成sql语句的时候,要给insert语句赋值,值从属性的getter方法
中得到,在拼接getter方法的时候,出错了。

错误4

这里写图片描述

当在执行session.get方法的时候,会利用Java的反射机制创建一个对象,利用的是默认的构造函数。所以一个持久化类中必须有一个默认的构造函数

错误5

这里写图片描述

要求主键必须在程序中进行设置

错误6

这里写图片描述

主键的生成策略支持表的主键的值的自动增长,但是该表本身没有这样的机制。

错误7

这里写图片描述

错误解析:
在flushing之前,保存一个临时状态的对象

前提条件:
在Classes.hbm.xml文件中

这里写图片描述

在客户端:

这里写图片描述

所以hibernate在保存classes的时候,就不知道该怎么办了。

错误8

这里写图片描述

错误9

这里写图片描述

错误原因:当一个对象从数据库中加载数据的时候,session已经关闭了
所有的数据在数据库中加载出来以后,session才能关闭。

0 0