有部门表(PxDept)和员工表(PxEmployee)关系是PxDept(1)->PxEmployee(N)
首先PxDept.hbm.xml中这样设置
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="hibernate.bean.PxDept" table="px_dept" schema="dbo"
catalog="test">
<cache region="read-write"/>
<id name="deptId" type="integer">
<column name="dept_id" />
<generator class="identity" />
</id>
<many-to-one name="pxDept" class="hibernate.bean.PxDept"
insert="false" update="false">
<column name="parent_id" />
</many-to-one>
<property name="parentDeptId" type="integer">
<column name="parent_id" />
</property>
<property name="deptName" type="string" >
<column name="dept_name" length="256" not-null="true" />
</property>
<set name="pxEmployees" inverse="true" cascade="delete" batch-size="8" lazy="true">
<cache usage="read-write"/>
<key>
<column name="dept_id" not-null="true" />
</key>
<one-to-many class="hibernate.bean.PxEmployee" />
</set>
</class>
</hibernate-mapping>
我使用以下查询:
(1)List list = session.createQuery("from PxDept as p1 left join fetch p1.pxEmployees").setCacheable(true).list();
(2)list = session.createQuery("from PxDept as p1 left join fetch p1.pxEmployees").setCacheable(true).list();
在(2)中的list结果是从缓存中取的,但里边PxDept对象中的关联对象pxEmployees集合是空的
下面我面又另一种方式:
将PxDept.hbm.xml中的关联关系改下
<set name="pxEmployees" inverse="true" cascade="delete" batch-size="8" lazy="false">
<cache usage="read-write"/>
<key>
<column name="dept_id" not-null="true" />
</key>
<one-to-many class="hibernate.bean.PxEmployee" />
</set>
lazy="false"
(1)List list = session.createQuery("from PxDept as p1 left join fetch p1.pxEmployees").setCacheable(true).list();
(2)list = session.createQuery("from PxDept as p1 left join fetch p1.pxEmployees").setCacheable(true).list();
这会在(2)中的list 中的pxDept中的pxEmployees集合就有数据了,请问 这什么怎么回事???
分享到:
相关推荐
6. **缓存策略**: Hibernate的二级缓存可以用于提高数据访问速度,而MyBatis可以通过插件实现自己的缓存机制,两者结合可以构建更高效的缓存体系。 7. **错误调试**: MyBatis的SQL日志记录功能可以帮助开发者快速...
- **内置缓存**:Hibernate默认提供的一级缓存。 - **外置缓存**:可通过配置使用第三方缓存插件(如EHCache)来扩展缓存功能。 #### Hibernate事务管理 - **事务特性**: - **原子性**(Atomicity):事务中的...
5. **缓存机制**:介绍了第一级缓存和第二级缓存,以及如何利用缓存提高应用程序性能。 6. **复杂映射**:包括一对多、多对一、一对一、多对多等关联关系的映射,以及自联映射和集合映射。 7. **性能优化**:提供...
1. 联级加载与懒加载:初始化关联对象的策略,前者在加载父对象时同时加载子对象,后者在需要时才加载。 2. 自动更新与脏检查:Hibernate自动检测对象状态变化并同步到数据库。 3. 异常体系:Hibernate有自己的异常...
根据提供的文件信息,我们可以整理出以下关于SSH(Struts + Spring + Hibernate)框架的重要知识点: ### 1. Hibernate 的基本操作流程 - **获取配置文件**:首先需要加载配置文件,通常为`hibernate.cfg.xml`。 -...
接下来,Hibernate作为ORM(对象关系映射)工具,简化了数据库操作。在省市区级联的案例中,我们需要设计省、市、区三个实体类,每个实体类对应数据库中的一个表。通过Hibernate的注解或XML配置,可以定义实体类与表...
Hibernate采用了传统的对象关系映射(ORM)技术,能够自动将Java对象映射到数据库表,并自动生成相应的SQL语句,这在处理常见的CRUD(Create, Read, Update, Delete)操作和查找标准条件时非常高效。Hibernate的另一...
4. **数据库SQL基础**:熟悉SQL语言,包括基本的增删改查操作,以及更复杂的联表查询和子查询。这对于任何涉及到数据库的应用程序都是必需的。 5. **JDBC编程**:理解JDBC的工作原理,学习如何连接数据库,执行SQL...
12. **企业级技术**:掌握Maven构建工具,Redis缓存技术,以及日志管理库log4j,这些都是大型项目中的常见组件。 13. **Linux基础**:了解Linux命令行操作,因为大多数服务器运行在Linux环境下。 学习要求方面,你...
- **ORM框架**: 如Hibernate、MyBatis等,用于实现对象关系映射。 - **工作流框架**: 如Activiti等,用于管理业务流程。 - **IoC框架**: 如Spring等,用于实现依赖注入。 - **路由框架**: 如Camel等,用于构建...
- **多级联查询:** 实现了省市区三级联动的数据查询功能。 - **异步图片上传:** 使用异步技术上传图片至后端服务器,提高用户体验。 - **图片服务器分离:** 将图片存储于独立的图片服务器上,优化资源加载速度...
- **缓存技术**:了解Hibernate的缓存机制。 - **性能优化**:学会如何优化Hibernate的性能。 **3. Spring(重点)** - **IOC、AOP**:理解依赖注入和面向切面编程的概念。 - **DataSource**:掌握Spring中的数据源...
- **缓存管理**:一级缓存(session缓存)和二级缓存(全局缓存),提高数据访问性能。 #### 多线程应用与机制 - **线程创建**:通过继承Thread类或实现Runnable接口。 - **线程同步**:synchronized关键字、...
- Hibernate是一个全功能的ORM框架,支持懒加载、缓存、事务管理等特性。 - MyBatis是一个半自动的ORM框架,更适合复杂的SQL查询和定制化需求。 - **Hibernate延迟加载的机制**: - 延迟加载是指在需要的时候才...
2. **Hibernate**:作为JPA的实现之一,提供了强大的对象关系映射功能。 3. **SQL查询**:可能包含复杂的联表查询、分页查询等,用于获取库存数据。 【文档说明】 项目通常会附带详细的使用文档,指导如何运行项目...