NHibernate。不同的父子获取

发布于 2024-09-04 05:12:20 字数 1740 浏览 1 评论 0原文

我有常见的 NH 映射;

  <class name="Order, SummaryOrder.Core" table='order'>
      <id name="Id" unsaved-value="0" type="int">
         <column name="id" not-null="true"/>
         <generator class="native"/>
     </id>
    <many-to-one name="Client" class="SummaryOrderClient, SummaryOrder.Core"      column="summary_order_client_id"
            cascade="none"/>
    <many-to-one name="Provider" class="SummaryOrderClient, SummaryOrder.Core" column="summary_order_provider_id"
           cascade="none"/>
    <set name="Items" cascade="all">
        <key column="order_id"/>
        <one-to-many class="OrderItem, Clients.Core" />
    </set>  
 </class>

想要按此条件获取列表

ICriteria criteria = NHibernateStateLessSession.CreateCriteria(typeof(SummaryOrder.Core.Domains.Order)); ;
        criteria.Add(Restrictions.Or
                (Restrictions.Eq(String.Format("{0}.Id", SummaryOrder.Core.Domains.Order.Properties.Client), idClient),
                  Restrictions.Eq(String.Format("{0}.Id", SummaryOrder.Core.Domains.Order.Properties.Provider), idClient))).
                  SetResultTransformer(new DistinctRootEntityResultTransformer()).
                  SetFetchMode(SummaryOrder.Core.Domains.Order.Properties.Items, FetchMode.Join);
        return criteria.List<SummaryOrder.Core.Domains.Order>() as List<SummaryOrder.Core.Domains.Order>

,但我有重复项。当我执行一个限制(不带 OR)时,我得到了不同的订单集合,但限制 OR 阻止了我的查询。我想获得不同的(在客户那里)订单集合。怎么了。请帮忙!

这个 hql 正在工作。为什么我无法通过标准 API 获得此结果?

       select distinct o from Order o left join fetch o.Items where o.Client.Id=1 or o.Provider.Id=1

I've got common NH mapping;

  <class name="Order, SummaryOrder.Core" table='order'>
      <id name="Id" unsaved-value="0" type="int">
         <column name="id" not-null="true"/>
         <generator class="native"/>
     </id>
    <many-to-one name="Client" class="SummaryOrderClient, SummaryOrder.Core"      column="summary_order_client_id"
            cascade="none"/>
    <many-to-one name="Provider" class="SummaryOrderClient, SummaryOrder.Core" column="summary_order_provider_id"
           cascade="none"/>
    <set name="Items" cascade="all">
        <key column="order_id"/>
        <one-to-many class="OrderItem, Clients.Core" />
    </set>  
 </class>

Want get list by this criteria

ICriteria criteria = NHibernateStateLessSession.CreateCriteria(typeof(SummaryOrder.Core.Domains.Order)); ;
        criteria.Add(Restrictions.Or
                (Restrictions.Eq(String.Format("{0}.Id", SummaryOrder.Core.Domains.Order.Properties.Client), idClient),
                  Restrictions.Eq(String.Format("{0}.Id", SummaryOrder.Core.Domains.Order.Properties.Provider), idClient))).
                  SetResultTransformer(new DistinctRootEntityResultTransformer()).
                  SetFetchMode(SummaryOrder.Core.Domains.Order.Properties.Items, FetchMode.Join);
        return criteria.List<SummaryOrder.Core.Domains.Order>() as List<SummaryOrder.Core.Domains.Order>

But I've got duplicates.. When I execute One restriction (without OR) I got distinct collection of orders, but Restriction OR brakes my query. I wanna get distinct(at client yet) collection of orders. What's wrong. Please HELP!

This hql is working. Why couldn't I get this result by criteria API?

       select distinct o from Order o left join fetch o.Items where o.Client.Id=1 or o.Provider.Id=1

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不再见 2024-09-11 05:12:20

检查您的 Provider 映射:

<many-to-one name="Provider" class="SummaryOrderClient, SummaryOrder.Core"     column="summary_order_provider_id"
           cascade="none"/>

类名错误!?

check your mapping for Provider:

<many-to-one name="Provider" class="SummaryOrderClient, SummaryOrder.Core"     column="summary_order_provider_id"
           cascade="none"/>

the class name is wrong !?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文