当我们在Hibernate中保存一个对象时,我们将依赖对象保存为id,而不是加载并保存该对象。
例如:员工有一个部门外键,所以如果我们需要保存员工对象,我们会执行以下操作:
saveEmployee{
emp.setName(name);
Department department = session.find(Department.class,deptid);
emp.setDepartment(department);
}
现在,如果我们导入1000条记录,并且在excel中有deptid作为一个单独的列,那么将调用不必要的1000次db来获取相应的部门。
有更好的方法吗是否可以在没有对象到对象映射的情况下强制执行外键?
使用load
方法而不是find
:
Department department = session.load(Department.class,deptid);
持久性提供者只会在这一点上创建一个代理,并假设实体在数据库中物理存在(如果不存在,则会出现错误)。
假设您的所有操作都在一个事务性方法中,那么您将获得N个不带任何选择的插入。