NHibernate Outer join fetch

2024-02-27 18:08
文章标签 join fetch nhibernate outer

本文主要是介绍NHibernate Outer join fetch,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

项目中的两个对象 A, B, 采用了 one-to-one 映射进行关联。

(原文链接 http://ddbiz.com/?p=216)

因为对象中有一个大字段,每次存取都会耗费大量查询,因此把此内容分开存放在 B 对象中。
<class name="A">
    <id name="Id" column="Id" type="Int32" unsaved-value="-1">
      <generator class="native" />
    </id>
 <one-to-one name="B" cascade="all" />   
</class>

<class name="B">
    <id name="Id" column="Id" type="Int32" unsaved-value="-1">
      <generator class="foreign" >
        <param name="property">A</param>
      </generator>
    </id>
 <one-to-one name="A" constrained="true" cascade="all" />   
</class>

在使用 ICriteria c = sessionManager.OpenSession().CreateCriteria(typeof(A)) 的查询时
c.List()
返回了 IList<object[A][B])的对象数组,与预期的相反,因为我们只想取A对象。查看 NHibernate.SQL,发现此查询语句采用了 A outer join B
从而返回全部对象。

这种方式采用一次查询返回对象的两个部分,执行效率确实会提高,但是不适合此处我们的应用,因为B部分的大内容我们此时用不到。可以采用如下几种方式来定义仅仅返回对象A:

  • 1 全局限定 one-to-one, many-to-one

 hibernate.max_fetch_depth
  = 0:不通过 outer join 装载对象
  > 0:使用outer join 同时装载对象
  
 hibernate.use_outer_join = true|false
 此属性仅作版本保留,请使用 max_fetch_depth 设置

  • 2 在 mapping 文件中限定  

<class name="A">
    <id name="Id" column="Id" type="Int32" unsaved-value="-1">
      <generator class="native" />
    </id>
 <one-to-one name="B" cascade="all" outer-join="false" />   
</class>

<one-to-one ...outer-join="auto|true|false"/>

3 在 mapping 文件中限定 fetch 方法
<class name="A">
    <id name="Id" column="Id" type="Int32" unsaved-value="-1">
      <generator class="native" />
    </id>
 <one-to-one name="B" cascade="all" fetch="select" />   
</class>

<one-to-one ... fetch="join|select"/>

 

这篇关于NHibernate Outer join fetch的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/753187

相关文章

MySQL 多表连接操作方法(INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN)

《MySQL多表连接操作方法(INNERJOIN、LEFTJOIN、RIGHTJOIN、FULLOUTERJOIN)》多表连接是一种将两个或多个表中的数据组合在一起的SQL操作,通过连接,... 目录一、 什么是多表连接?二、 mysql 支持的连接类型三、 多表连接的语法四、实战示例 数据准备五、连接的性

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

一文详解JavaScript中的fetch方法

《一文详解JavaScript中的fetch方法》fetch函数是一个用于在JavaScript中执行HTTP请求的现代API,它提供了一种更简洁、更强大的方式来处理网络请求,:本文主要介绍Jav... 目录前言什么是 fetch 方法基本语法简单的 GET 请求示例代码解释发送 POST 请求示例代码解释

java String.join()的使用小结

《javaString.join()的使用小结》String.join()是Java8引入的一个实用方法,用于将多个字符串按照指定分隔符连接成一个字符串,本文主要介绍了javaString.join... 目录1. 方法定义2. 基本用法2.1 拼接多个字符串2.2 拼接集合中的字符串3. 使用场景和示例3

数据库使用之union、union all、各种join的用法区别解析

《数据库使用之union、unionall、各种join的用法区别解析》:本文主要介绍SQL中的Union和UnionAll的区别,包括去重与否以及使用时的注意事项,还详细解释了Join关键字,... 目录一、Union 和Union All1、区别:2、注意点:3、具体举例二、Join关键字的区别&php

MySQL学习笔记-join语句类型

join从句的类型:内链接(inner) 全外连接(full outer) 左外连接(left outer) 右外连接(right outer) 交叉链接(cross) 连接条件:使用ON设定连接条件,也可以用WHERE代替 · ON:设定连接条件 · WHERE:进行结果集记录的过滤 一,内连接inner join:  内连接是返回左表及右表符合连接条件的记录,在MySQL中JO

fetch-event-source 如何通过script全局引入

fetchEventSource源码中导出了两种类型的包cjs和esm。但是有个需求如何在原生是js中通过script标签引呢?需要加上type=module。今天介绍另一种方法 下载源码文件: https://github.com/Azure/fetch-event-source.git 安装: npm install --save-dev webpack webpack-cli ts

Typora配置PicGo时,提示Failed to fetch

Typora配置PicGo时,提示Failed to fetch 两者配置的端口不一致造成的 打开Typora,选择文件-偏好设置-图像-验证图片上传选项,点击验证图片上传选项 会提示错误:Failed to fetch,此时可以发现typora中设置的上传端口为36677 打开PigGo,选择PicGo设置-设置server,会发现监听端口为36678 修改监听接口为366

多线程 | join方法

文章目录 1. 作用2. 用法3. 异常4. 源码为什么使用wait方法 5. 如何实现按照指定顺序执行线程6. 线程运行状态 1. 作用 在 Java 多线程中,join方法用于等待一个线程执行完毕。当一个线程调用另一个线程的join方法时,当前线程会进入等待状态,直到被调用的线程执行完毕。这使得开发者可以控制线程的执行顺序,确保某些关键线程在其他线程之前完成执行。 2. 用

SylixOS pthread_join退出

1 问题描述 在移植中间件过程中,在SylixOS下调用pthread_join时,如果线程在pthread_join等待之前结束,则线程返回无效线程错误值。在Linux下这种调用会正常返回。两种实现是有差别的,实现的原理分别如下。 2 函数实现机制 2.1 实现机制 在SylixOS下调用pthread_join时,如果线程在pthread_join等待之前结束,线程返回无效线程错误标志