Lazy属性做为Hibernate的提升性能的一个重要参数...想必已被大家所熟知...虽然Hibernate2.1.*里面还不支持对于 property的延迟加载...但是正确并且灵活的设置XXX-to-many中的Lazy属性, 可以给程序性能带来很大提高
请先看看下面这段配置
< set name = " moderators " lazy = " true " inverse = " false " outer - join = " true " cascade = " all " order - by = " creationDate asc " >
< key column = " forumid " />
< one - to - many class = " ModeratorPO " />
</ set >
正 如我一厢情愿的,此段代码在我的程序中使用了很长时间,我也一度自以为是的以为它为我实现了moderators集合的延迟加载,可是当我仔细得阅读了 Hibernate为我的getObject()方法输出得SQL时...我发现我取得的是一个很大的SQL列表,竟有十余条之多
难道lazy设置失效了么?反复的调试,查看文档,google........
最终在分析输出的SQL后发现了“罪魁祸首”:outer-join
其 实原因很简单,outer-join即外连接抓取,Hibernate将分开的N条SQL语句通过table_nameA left join table_nameB on(具体语法由实际的DBMS决定)来合并成一条SQL提交给数据库,并返回PO对象以及Collection的PO列表,这本也是Hibernate 提升性能减少数据库访问的一个优化措施..但是在获取Collection时,采用outer-join就导致了collection与PO对象本身同时 提交到查询,也就变相的失去了延迟加载的效果
经多次测试 当outer-join=true时,你的lazy属性无论设置为任何值,Collection都会初始加载
(one-to-one没有lazy 因此不必考虑^_^)
请大家谨慎设置outer-join=true
分享到:
相关推荐
- `<many-to-one>` 标签用于定义多对一的关联关系,`name` 属性表示Java类中的属性名称,`class` 属性指定了关联对象的类名,`outer-join` 属性表示是否启用外连接查询,`not-null` 和 `lazy` 分别表示是否允许为空...
- `not-found="ignore|exception"`属性表示当找不到关联时的行为,默认为抛出异常,也可以设置为忽略。 - `entity-name="EntityName"`属性可选,用于指定实体名称。 - `<key>`元素用于指定关联的外键。 - `outer-...
- **迫切左外连接检索策略**:通过设置`lazy="false"`和`outer-join="true"`来实现。这种方式可以在一次查询中获取主对象及其关联对象,减少了查询次数,提高了性能。 #### 四、Hibernate配置与检索策略 - **类...
使用`<set>`元素来定义一对多关系,并通过`inverse="true"`属性来指定关联维护方,从而避免冗余SQL语句,提高性能。此外,可以在持久化类中添加实用方法,这些方法对Hibernate透明,方便应用程序直接调用。 **二、...
<many-to-one name=".." outer-join="true"/> ``` - **SELECT抓取**:分别发送多个SELECT语句来获取对象及其关联对象的数据。这种方式增加了查询次数,但减少了每次查询的数据量。 ```xml <set name=".." ...
5. `outer-join`: 控制是否使用外连接进行查询,可能的值有`auto`, `true`, `false`。 6. `update`, `insert`: 分别决定关联字段是否在UPDATE和INSERT语句中包含。设为`false`表示关联值由其他方式提供。 7. `...
<property name="use_outer_join">true <!-- 指定Model所在的程序集 --> </session-factory> </hibernate-configuration> ``` 2. **读取配置**:使用`NHibernate.Cfg.Configuration`类的`Configure`方法来...
默认情况下,`join`设置为'outer',这意味着即使索引不完全相同,也会将所有列合并,并用NaN填充缺失的值。如果设置`join='inner'`,则只会保留两个DataFrame共同的列。 在某些场景下,我们可能希望在拼接时忽略...
AbsolutePosition 不支持 不支持 可读写 可读写 ActiveConnection 可读写 可读写 可读写 可读写 BOF 只读 只读 只读 只读 Bookmark 不支持 不支持 可读写 可读写 CacheSize 可读写 可读写 可读写 可读写 ...
- **outer-join**:可选属性,默认为 "auto",表示是否使用外连接。 - **fetch**:可选属性,默认为 "select",表示加载策略。 - **persister**:可选属性,表示持久化器类。 - **collection-type**:可选属性,表示...
- Hive支持多种类型的JOIN操作,包括Inner Join、Left Outer Join、Right Outer Join等。 - 示例:`SELECT e.name, d.department_name FROM employees e JOIN departments d ON e.department_id = d.id;` #### 五、...
- `outer`:全连接,包含所有两边的行,对于没有匹配的行,结果中相应位置填充NaN,相当于SQL的FULL OUTER JOIN。 默认情况下,`merge()`函数会使用重叠的列索引来作为合并键。如果需要使用行索引(index)作为键,...
- `outer-join`: 是否使用外联接。 - **双向管理**: - 需要在两边都设置`inverse`和`lazy`。 - `cascade`只能设置为`insert-update`。 - **示例**: - `group1.getRoles().add(role1);` - `role1.getGroups()....
outerJoin="true"/> <!-- 课程实体类映射 --> <resultMap id="courseResultMap" type="Course"> <!-- ... --> <collection property="students" javaType="ArrayList" ofType="Student" select=...
`<many-to-one>`标签用于定义一对多的关系,`outer-join="ture"`, `not-null="true"`, 和 `lazy="false"`分别表示外键关联的查询方式、外键是否可为空以及延迟加载策略。 3. **双主键、无外键配置** 当实体类有两...
- **RIGHT OUTER JOIN**:返回右表所有行和左表匹配的行。 - **FULL OUTER JOIN**:返回两个表所有行。 **4.4 groupby** - **分组统计**:`SELECT column1, COUNT(*) FROM table_name GROUP BY column1`。 **4.5 ...
在本压缩包“chapter12(SQL版).zip”中,主要包含的是与SQL相关的练习题,由原创作者田超凡创作,并已申请版权。SQL(Structured Query Language,结构化查询语言)是用于管理关系数据库系统的核心语言,广泛应用...
<property name="use_outer_join">true <!-- 映射配置 --> <mapping assembly="NhibernateSample1"/> </session-factory> </hibernate-configuration> ``` - 这个配置文件用于设置Nhibernate的工作环境,...