【问题标题】:NHibernate base and derived class mappingNHibernate 基类和派生类映射
【发布时间】:2009-10-09 08:39:53
【问题描述】:

情况: 我有一个类 MyClass 及其“轻量级”版本 MyClassLite,所以我有

public class MyClass : MyClassLite

我还使用 hbm 文件来映射我的类(它们被映射到同一个表)。 问题是,当我尝试获取 MyClassLite 实体列表时,我不仅得到 MyClassLite 实体,而且还得到 MyClass 实体列表.我怎样才能摆脱它?

【问题讨论】:

  • 这不合逻辑吗? MyClass 是 MyClassLite 的子类,因此任何 MyClass 实例也是 MyClassLite 的实例。如果您想摆脱它们,请更改您的继承层次结构。例如。引入一个基类并创建 MyClass 和 MyClassLite 的子类。
  • 看起来合乎逻辑,但我想知道是否有任何选项(可能在 hbm 文件中)来防止检索派生实例。一定有什么..
  • 您如何查询此表以获取 MyClassLite 的列表?

标签: c# nhibernate class mapping base


【解决方案1】:

这个 ClassLite 到底是什么?为什么您的 Class 继承自 ClassLite ?这里真的存在“IS-A”关系吗?

ClassLite 存在的原因是什么?例如,当您必须显示“类”实例的概述时,它是您使用的类吗? 然后,如果是这种情况,您应该查看 DTO 或“视图”、投影和 AliasToBeanEntityResultTransformer。

【讨论】:

    【解决方案2】:

    如果您在映射或查询中为列表配置预加载,您将获得 MyClass 实现。

    在条件查询中:

    Criteria.SetFetchmode("MyClassListProperty", Fetchmode.Eager)
    

    在 hql 查询中:

    left join fetch MyClassListProperty
    

    在映射文件中:

    <set [...] lazy="false"> ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-29
      • 1970-01-01
      • 2021-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多