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学习笔记-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等待之前结束,线程返回无效线程错误标志

多表连接的三种方式hash join,merge join,nested loop

多表之间的连接有三种方式:Nested Loops,Hash Join和 Sort Merge Join. 下面来介绍三种不同连接的不同:     一. NESTED LOOP: 对于被连接的数据子集较小的情况,嵌套循环连接是个较好的选择。在嵌套循环中,内表被外表驱动,外表返回的每一行都要在内表中检索找到与它匹配的行,因此整个查询返回的结果集不能太大(大于1 万不适合),要把返回

Apache-Flink深度解析-Temporal-Table-JOIN

在《JOIN LATERAL》中提到了Temporal Table JOIN,本篇就向大家详细介绍什么是Temporal Table JOIN。在ANSI-SQL 2011 中提出了Temporal 的概念,Oracle,SQLServer,DB2等大的数据库厂商也先后实现了这个标准。Temporal Table记录了历史上任何时间点所有的数据改动,Temporal Table的工作流程如下:

Flink重点难点:维表关联理论和Join实战

点击上方蓝色字体,选择“设为星标” 回复”面试“获取更多惊喜 在阅读本文之前,你应该阅读过的系列: 《Flink重点难点:时间、窗口和流Join》《Flink重点难点:网络流控和反压》 Flink官方文档中公开的信息 1 Join 的概念 在阅读之前请一定要先了解: 数据流操作的另一个常见需求是对两条数据流中的事件进行联结(connect)或Join。Flink DataStream API中

【硬刚Hadoop】HADOOP MAPREDUCE(11):Join应用

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Hadoop部分补充。 1 Reduce Join Map端的主要工作:为来自不同表或文件的key/value对,打标签以区别不同来源的记录。然后用连接字段作为key,其余部分和新加的标志作为value,最后进行输出。 Reduce端的主要工作:在Reduce端以连接字段作为key的分组已经完成,我们只需要在

java join sleep wait notify notifyAll

sleep:在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。该线程不丢失任何监视器的所属权。  通过调用sleep使任务进入休眠状态,在这种情况下,任务在指定的时间内不会运行。 调用sleep的时候锁并没有被释放。 休眠  Java SE5引入了更加显示的sleep()版本作为TimeUnit类的一部分,这个方法允许你