Hibernate3疑惑解决
1.session的get()和load()有什么区别?
# get()如果没有找到持久化类返回null,有可能导致空指针异常。
# load()如果没有找到持久化类直接抛出异常。
# get()是直接加载数据,load()是延迟加载,当使用被加载数据的时候才发送SQL。
简而言之:Hibernate对于load()认为数据库一定存在,因此可以放心的使用代理进行延迟加
载,如果使用中发现了问题,那么只能抛出异常。而对于get方法一定要获取真实的数据,否则
返回null。
DataType dataType1 = (DataType) session.load(DataType.class, new Long(1));
DataType dataType2 = (DataType) session.load(DataType.class, new Long(1));
System.out.println(dataType1); // 延迟加载,需要使用才发送SQL语句
System.out.println(dataType2); // 从一级缓存中获取持久化对象
System.out.println(dataType1 == dataType2);
session.getTransaction().commit();
2.Query对象在获取表的所有的数据的时候,使用list()和 iterator()有什么区别?
# 编写代码的方式不同 list()和iterator()
# 底层发送的SQL语句不同
list()直接一次性获取到所有持久化类的对象
iterator()先获取的是所有的数据的id值。当真正的遍历使用数据的
时候再发送select语句。因此该方法一定要处于session会话中。
# list发送的查询语句只有1条。Iterator发送多条查询语句,因此
iterator的效率低下。懒汉式(iterator) 饿汉式(list)
3.list和iterator什么时候使用?
list()如果表中有少量条数据
iterator()如果表中有N W条数据
联合主键问题?
(1) 联合主键映射后可以进行数据的插入
(2) 联合主键添加后如何查找该持久化对象?
(3) 联合主键类为什么要实现Serializable接口?
问题解决
(1) 继续使用get方式加载持久化的对象
get(Class clazz, Serializable id)
(2) 只有主键实现了Serializable接口才可以调用该get()方法
最新文章
- sharepoint关键位置
- ReactJS学习笔记(二)
- Dapper学习 - Dapper的基本用法(一) - 查询
- Codeforces Round #285 (Div.1 B &; Div.2 D) Misha and Permutations Summation --二分+树状数组
- WCF终结点配置
- Java学习----有风险的代码(异常)
- hql中不能写count(1)能够写count(a.id)
- 对于笔试题--“good and abc”的理解
- Delphi用ADOquery主从表例子(转总结)
- c#多线程同步之lock
- 解决本地SqlServer无法连接远程服务器数据库,错误10060
- Linux安装jdk-8u161-linux-x64
- Excel文件读取的两种方式
- 使用phpstorm进行PHP断点调试
- Base标签小记:更改当前页面的地址
- 02_python_while循环/格式化输出/逻辑运算
- Android app 全局异常统一处理
- 阿里云服务器IIS启用HTTPS协议(转)
- mysqld_safe脚本执行的基本流程
- mysql 下载
热门文章
- 发送短信——java
- 《浏览器工作原理与实践》<;06>;渲染流程(下):HTML、CSS和JavaScript,是如何变成页面的?
- swagger2注解使用方法
- Redis主从、哨兵、集群
- 用 Spark 处理复杂数据类型(Array、Map、JSON字符串等)
- git -C <;other-git-repo-path>; [git-command] 指定其它路径的仓库 执行命令
- 图像的padding操作
- js上传文件夹
- 「BZOJ 5010」「FJOI 2017」矩阵填数「状压DP」
- 解决xftp远程连接后出现中文乱码