代码之家  ›  专栏  ›  技术社区  ›  Richard Neil Ilagan

如何将此条件写入NHibernate HBM映射?

  •  3
  • Richard Neil Ilagan  · 技术社区  · 14 年前

    所以我参加了一个NHibernate速成班,遇到了一个问题,下面的例子。

    假设我有以下.NET类:

    class A {
        int id;
        int type_var;
        List<B> someCollection;
    }
    
    class B {
        int id;
        string someText;
    }
    

    我可能会把它画成:

    <class name="A" table="A">
        <id name="id" type="Int32">
             <generator type="identity" />
        </id>
        <property name="type_var" />
        <set name="someCollection" table="B">
             <key name="fk_aid" />
             <composite-element class="B">
                  <property name="someText" />
             </composite-element>
        </set>
    </class>
    

    我的问题是,如果我们只想得到那些属于A(通过fk\u-aid)并且type\u-var值等于A的B元素(假设A和B都有一个type\u-var列,但是它们没有显式的关联),您将如何更改这个映射。

    我在想,我得用where子句之类的东西?

    <set name="someCollection" table="B" where="type_var = type_var">
    

    到底要怎么做?

    1 回复  |  直到 14 年前
        1
  •  0
  •   DanP    14 年前

    我相信子选择在这种情况下可能会起作用(假设您的RDMS支持它);比如:

    <set name="someCollection" table="B" where="type_var = (SELECT A.type_var FROM A WHERE A.fk_aid = id)"> 
    

    我不太清楚您试图在这里实现什么;但是您可以考虑将其映射为一个仅查询的属性;如中所讨论的 this article .