传智播客OA项目学习--阶段三(级联操作)

2020-07-27 17:01:02 浏览数 (1)

一、Hibernate

1、级联操作

例子:

代码语言:javascript复制
<set name="children" cascade="delete">
			<key column="parentId"></key>
			<one-to-many class="Department"></one-to-many>
		</set>

这样在添加(cascade="delete"),在进行删除操作时,会对“children”进行相同的操作。

代码语言:javascript复制
 cascade属性有四种取值:  
             all:所有操作都执行级联操作;
             none:所有操作都不执行级联操作;
             save-update:保存和更新时执行级联操作;
             delete:删除时执行级联操作;

2、

代码语言:javascript复制
@Resource //Spring 注入,获取实例
private SessionFactory sessionFactory;

sessionFactory.getCurrentSession().createQuery(//
                                                "FROM Department d WHERE d.parent IS null"//面向对象查询
                                                ).list();
                                                
 1)返回单条记录:get()、load()方法
     区别:a、get()方法不采用延迟加载方式;load()方法采用延迟加载的方式
           b、使用get()方法查找不存在的记录时会报NullPoint异常;
              使用load()方法查找不存在的记录时会报ObjectNotFound异常
           疑问:为什么get()方法查找不存在的记录时会报空指针异常?
           回答:get()方法执行查询语句,当查找到不存在的记录时就返回空值,当调用对象属性的
                 get()方法时,由于属性值为空,因此才会报空指针异常
  2)返回多条记录:list()方法、iterator()方法
     区别:1)list()方法不采用延迟加载方式;iterator()方法采用延迟加载的方式
           2)list()方法在执行时有N条记录就执行N条SQL语句;
              iterator()方法在执行时会产生"N 1"问题:有N条记录,就会执行N 1条SQL语句。
           疑问:为什么iterator()方法在执行时会产生"N 1"问题?
           回答:iterator()方法在执行时,首先会查询满足条件的记录的主键列,然后通过主键列再去
                 执行N条SQL语句

0 人点赞