NHibernate - 通过不同的键多次 JOIN 到同一个表

2023-12-01

另一个 NHibernate JOIN 问题。

我正在尝试通过不同的两个表连接一个表中的两个不同的属性 键。 但我无法获得第二个 JOIN 属性。

简化示例 -

我的课 -

namespace Domain
{
   public class Message
   {
      #region private Members

      private string _id;
      private string _senderID;
      private string _recipientID;
      private string _recipientName;
      private string _senderName;

      #endregion

      #region Public Properties

      public virtual string ID
      {
          get { return _id; }
          set { _id = value; }
      }

      public virtual string ID
      {
          get { return _id; }
          set { _id = value; }
      }

      public virtual string SenderID
      {
          get { return _senderID; }
          set { _senderID= value; }
      }

      public virtual string RecipientID
      {
          get { return _recipientID; }
          set { _recipientID= value; }
      }

      public virtual string SenderName
      {
          get { return _senderName; }
          set { _senderName= value; }
      }

      public virtual string RecipientName
      {
          get { return _recipientName; }
          set { _recipientName= value; }
      }

      #endregion

      #region Constructors

      public Message()
      {
          _id = Guid.NewGuid().ToString();
      }

      #endregion
  } 
}

映射 -

 <class name="Domain.Message" table="Messages" >
    <id name="ID">
      <column name="OID"/>
      <generator class="assigned"/>
    </id>
    <property name="SenderID" unique="true">
       <column name="SenderID" unique="true"/>
    </property>
    <property name="RecipientID" unique="true">
       <column name="RecipientID" unique="true"/>
    </property>
    <join table="CompanyData"  optional="true" >
       <key column="CompanyID" property-ref="SenderID" />
       <property name="SenderName" column="CompanyName" unique="true" lazy="false"/>
    </join>
    <join table="CompanyData"  optional="true" >
       <key column="CompanyID" property-ref="RecipientID" />
       <property name="RecipientName" column="CompanyName" unique="true" lazy="false"/>
    </join>
 </class>

但我得到以下 SQL -

SELECT  this_.OID as OID30_0_, this_.SenderID as Sender30_0_,
this_.RecipientID as Recipient30_0_, this_1_.CompanyName as SiteID9_0_
FROM Messages this_
left outer join CompanyData this_1_ on
this_.SenderID=this_1_.CompanyID
left outer join CompanyData this_2_ on
this_.RecipientID=this_2_.CompanyID

而且我要 -

 SELECT  this_.OID as OID30_0_, this_.SenderID as Sender30_0_,
 this_.RecipientID as Recipient30_0_, this_1_.CompenyName as
 SiteID9_0_ , this_2_.CompanyName as SiteID10_0_
 FROM Messages this_
 left outer join CompanyData this_1_ on
 this_.SenderID=this_1_.CompanyID
 left outer join CompanyData this_2_ on
 this_.RecipientID=this_2_.CompanyID

我正在使用 NHibernate 3.2

Thanks


我整天潜伏在互联网上寻找同样问题的解决方案。 我发现的是线程休眠板。我采取了解决方案阿什坎雅利安人。因此,如果其他人对解决方案感到头疼并且不想使用视图,我将发布我现在正在使用的代码。

我必须在同一个表上使用 1 到 12 个联接,因此创建视图非常令人困惑。

private void addParagraphsQuery(DetachedCriteria sourceQuery, List<ParagraphContentArgument> paragraphsArguments)
{
    DetachedCriteria dc;
    Conjunction conjunction = Restrictions.Conjunction();
    string alias = string.Empty;

    if (paragraphsArguments != null && paragraphsArguments.Count > 0)
    {
        for (int i = 0; i < paragraphsArguments.Count; i++)
        {
            alias = "p" + i.ToString();
            dc = DetachedCriteria.For<Document>().SetProjection(Projections.Id());
            dc.CreateAlias("paragraphList", alias);
            dc.Add(Restrictions.Eq(alias + ".paragraphSectionTemplate", paragraphsArguments[i].ParagraphTemplate));
            dc.Add(Restrictions.Like(alias + ".content", paragraphsArguments[i].Argument, MatchMode.Anywhere));
            conjunction.Add(Property.ForName("id").In(dc));
        }
    }
    sourceQuery.Add(conjunction);
}

Regards,

Mariusz

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NHibernate - 通过不同的键多次 JOIN 到同一个表 的相关文章

  • 使用索引避免迭代器失效,维护干净的接口

    我创建了一个MemoryManager
  • 以编程方式更改 Excel 中的字体(Trebuchet MS、Calibari)C#

    我目前正在使用一个 C 应用程序 该应用程序有一个将生成 Excel 文件的类 一切都很顺利 Excel 工作表上填充的数据具有 Times New Roman 字体 我想将其更改为其他字体 Calibari 我怎样才能以编程方式做到这一点
  • 如何从 std::vector 中删除元素而不调整其大小

    迭代器擦除 迭代器位置 迭代器擦除 首先是迭代器 迭代器最后 擦除元素 从向量中删除 容器可以是单个元素 位置 或一系列元素 第一个 最后一个 这有效地减少了向量 大小除以元素数量 删除 调用每个元素的 之前的析构函数 and remove
  • 在宏中使用 # [重复]

    这个问题在这里已经有答案了 请解释一下代码 include
  • C# Visual Studio 动态代码片段

    我正在开发一个 WinForms 项目 每天都会执行一些重复性的任务 所以我认为创建代码片段 https msdn microsoft com en us library ms165394 v vs 110 aspx会帮助我 但它仅适用于固
  • 如何处理作为参数传递到方法中的 Lambda 表达式 - C# .NET 3.5

    我对 Lambda 表达式的了解有点不稳定 虽然我可以编写使用 Lambda 表达式 又名 LINQ 的代码 但我正在尝试编写自己的方法 该方法采用一些 Lambda 表达式类型的参数 背景 我正在尝试编写一个方法 该方法从任何其他对象类型
  • 在 Windows 服务中使用 OleDb 从 Excel 读取数据?

    免责声明 我知道这是一种不好的做事方式 这是我们与客户的唯一选择 Problem 我们需要每隔 x 时间从 Excel 文件读取数据 数据通过第三方 Excel 插件不断变化 应用程序的环境是 Windows XP SP1 和 Net 2
  • 使用私有构造函数的 C# 单元测试类?

    好吧 我刚刚收到一个作业 我必须对具有私有构造函数的类执行单元测试 现在 当所有方法也都是非静态时 我该如何在不初始化类的情况下进行单元测试 有什么方法可以对具有私有构造函数的类进行单元测试 无需反射 如果您无法将类公开 您仍然可以通过以下
  • 如果 .txt 文件不存在,则创建一个,如果存在则追加新行

    我想创建一个 txt 文件并写入它 如果该文件已经存在 我只想添加更多行 string path E AppServ Example txt if File Exists path File Create path TextWriter t
  • Linux C++ 调试器

    我正在寻找完美的 Linux C 调试器 我不期望成功 但搜索应该提供丰富的信息 我是一个非常有能力的 gdb 用户 但 STL 和 Boost 很容易压垮我的调试技能 并不是说我无法深入了解数据结构的内部结构 而是它需要很长时间 我通常会
  • 持续运行的 C# 代码 - 服务还是单独的线程?

    我有一个 NET 4 Web 应用程序 它有 3 个关联的独立项目 DAL BAL 和 UI 我正在使用实体框架进行数据库交互 我有代码循环遍历一堆数据库数据 根据找到的内容调用方法 然后更新数据库 我希望这段代码一直运行 同时 我希望用户
  • 第三方引用的 dll 未被复制来构建

    我有一个第三方 net dll 被我的 dll 类库项目 A 引用和使用 我的控制台应用程序项目 B 引用项目 A 我的问题是第三方 dll 没有被复制到控制台应用程序项目 B 的构建中 这里有什么问题呢 我的 dll 类库中引用的第三方
  • 如何让 PCRE 与 C++ 一起使用?

    这是一个新手问题 但我希望我能尽可能清楚地表达我的问题 我正在尝试用 C 进行模式匹配 我已经从以下位置下载了 PCRE 的 Win32 版本here http gnuwin32 sourceforge net packages pcre
  • 简单的喷射器将具体类型与生活方式结合起来

    我正在寻找一种可以使用指定的生活方式注册具体类型的方法 基本上如下所示 public void SomeFunction Type concrete Lifestyle lifestyle gt container Register con
  • 如何在 Windows 8.1 上打开多个 Visual Studio 窗口? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我使用的是 Windows 7 我能够启动多个 Visual Studio 并同时工作 现在我有 Windows 8 1 操作系统 每当我
  • 合并大文件的最佳方法是什么?

    我必须合并数千个大文件 每个大约 200MB 我想知道合并这些文件的最佳方法是什么 行将有条件地复制到合并文件中 可以使用 File AppendAllLines 或使用 Stream CopyTo 吗 使用 File AppendAllL
  • PC 上 XNA 中的信箱和缩放

    有没有一种方法可以让我基本上以 1080p 或 720p 作为默认分辨率来开发 XNA 游戏 然后根据设置的分辨率将游戏中的所有内容缩放到适当的大小 而不必在每个 Sprite 中设置缩放因子Draw 方法 我的想法是 我可以基于 1080
  • 更快的 WinSock sendto()

    我使用的是 Windows Server 2008 我的程序是用 C 编写的 我在 while true 循环中使用 WinSock2 和 sendto 来发送数据包 代码如下 while true if c snd gt max c sn
  • 从不同的线程访问对象

    我有一个服务器类 它基本上等待来自客户端的连接 在该类中 我创建了一个 NetworkStream 对象 以便能够从客户端接收字节 由于 NetworkStream Read 方法不是异步的 这意味着它将等到从客户端读取字节才能继续执行类似
  • 有关 Endian 性和 .Net 的详细信息?

    我有几个关于字节顺序的问题 这些问题足够相关 我保证将它们作为一个问题提出 1 字节顺序是由 Net还是由硬件决定的 2 如果是由硬件决定的 我怎样才能在C 中找出硬件的字节序 3 字节序是否影响二进制交互 例如 OR AND OR 或移位

随机推荐

  • Spring Cloud Kafka Streams 中的错误处理

    我正在使用 Spring Cloud Stream 和 Kafka Streams 假设我有一个处理器 它是一个将字符串的 KStream 转换为 CityProgrammes 的 KStream 的函数 它调用 API 按名称查找城市 并
  • 使用 protobuf-net 获取 ProtoGen

    我正在尝试使用 protobuf 序列化一些类 我使用 NuGet 安装了 protobuf net 用属性正确修饰了我的代码 一切都运行良好 然而 最终消息将在 C 中创建 但在其他环境中使用 因此我需要从 C 创建 proto 文件 或
  • 将功能分支重新设置为另一个功能分支

    我正在开发两个 私有 功能分支 a b c lt Master d e lt Branch1 f g lt Branch2 在这些分支上工作了一段时间后 我发现我需要对 Branch1 中的 Branch2 进行更改 我想将 Branch2
  • 在 ASP.NET 中锁定缓存的最佳方法是什么?

    我知道在某些情况下 例如长时间运行的进程 锁定 ASP NET 缓存非常重要 以避免另一个用户对该资源的后续请求再次执行长时间进程而不是访问缓存 在 C 中实现 ASP NET 缓存锁定的最佳方法是什么 这是基本模式 检查缓存中的值 如果可
  • Pyside 安装失败(Python 2.7.4)

    我刚刚升级到 Ubuntu 13 04 测试版 尝试使用 pip 将 pyside 安装到 Virtualenv python 2 7 4 时遇到错误 error Failed to locate the Python library us
  • 在 C 中制作 shell 时正确的管道方式是什么

    我正在尝试创建自己的 shell 我相信我已经正确完成了分叉 但我不知道如何正确进行管道传输 任何帮助或提示将不胜感激 基本上我的管道无法工作 我花了很长时间试图找出如何让它们在进程之间正确传输数据 include
  • PHP 和浏览器“后退”按钮 - 到底发生了什么

    假设我的 PHP 页面执行 真实 操作 我所说的 真实 是指执行数据库操作 写入文件等 而不是仅仅发送 HTML 当我点击 PHP 页面的 后退 按钮时 假设它是 GET 这是否意味着我的 PHP 代码不一定在所有浏览器上始终运行 如果我有
  • 原则 2:管理多对多关联的最佳方式

    Doctrine2 ORM 有 2 种技术方法来处理多对多关联 1 对于两个实体之间的 简单 关系 并且没有附加属性 Use ManyToMany 实体之间的关联 这种情况下直接使用链接表 不需要关联实体 2 当链接表引入额外字段或超过 2
  • 如何在缩放后应用 d3.js svg 裁剪

    我正在尝试将 svg clippath 与 d3 js 和缩放行为一起使用 以下代码创建一个矩形 然后将由矩形剪切区域对其进行剪切
  • 当文件在移动后发生重大修改时,Git 不会检测重命名

    考虑这个测试脚本 bin sh x rm rf test git init test cd test for I in 1 100 do echo I gt gt x done git add x git commit am initial
  • postgresql中的自定义自增字段(发票/订单号)

    基本要求是创建以下格式的订单号 M M SSS 其中 MM 代表当前月份 SSSS 代表该月的订单顺序 例如 1 002 代表一月份提交的第二个订单 使用触发器我希望自动增量和插入透明地工作 不幸的是 我已经很长时间没有接触存储过程了 这是
  • Zend Framework - 安装旧版本

    我已经安装了ZF3 但我在一家只使用 ZF2 的公司工作 我也必须能够使用 Doctrine 由于版本 3 无法与主义一起使用 我必须将其降级 或安装旧版本 但我不知道该怎么做 因为http framework zend com downl
  • Magento 1.8 的 Nginx 配置

    有人知道如何在 nginx 服务器的配置文件中配置 server 吗 我有下面这样的东西 server server name local com root some path index index php location try fi
  • apache 服务器上的 500 错误 - “此处不允许AllowOverride”

    我已经在我的 Mac OSX 10 9 上设置了一个服务器 但它返回 500 错误 并在错误日志中显示以下消息 alert client 1 Users user Sites mysite htaccess AllowOverride no
  • ASP 格式化日期

    您好 我正在尝试在 ASP 中获取以特定格式 yyyymmdd 显示的日期 这是我到目前为止所尝试过的 但没有运气 任何帮助表示赞赏 谢谢 tr td b Call Date b td td align center a href targ
  • 这个额外的字节是什么?

    我正在研究 PE 可移植可执行文件 格式 但我发现用 MinGW 和 MSVC 编译的 C 程序之间存在差异 这是 此程序无法在 DOS 模式下运行 之后和 PE 魔术签名之前的一些额外字节 有人知道这是什么以及为什么有 Rich 这个词吗
  • 在 KAFKA 中最大轮询间隔之前发布新事件后,滞后偏移被跳过

    Kafka v2 4 消费者配置 kafka consumer auto offset reset earliest kafka consumer auto commit false Kafka 消费者容器配置 Bean public Co
  • Julia 并行性:@distributed (+) 比串行慢?

    在互联网上看到一些关于 Julia 并行性的教程后 我决定实现一个小的并行片段来计算调和级数 序列号为 harmonic function n Int64 x 0 for i in n 1 1 summing backwards to av
  • Firebase Firestore 易于记住的参考资料

    我们使用 Firebase Firestore 进行数据存储 当用户创建新房间时 我们希望引用易于记住 以便用户可以与其他用户共享房间 ID 代码 目前 Firestore 将创建一个唯一的引用 例如 DvfTMYED5cWdo5qIraZ
  • NHibernate - 通过不同的键多次 JOIN 到同一个表

    另一个 NHibernate JOIN 问题 我正在尝试通过不同的两个表连接一个表中的两个不同的属性 键 但我无法获得第二个 JOIN 属性 简化示例 我的课 namespace Domain public class Message re