【问题标题】:NHibernate: How to exclude a class which is part of a join using the Criteria APINHibernate:如何使用 Criteria API 排除属于连接一部分的类
【发布时间】:2010-01-25 06:04:21
【问题描述】:

我还是 Hibernate 的新手,我正在尝试将它用于我继承的网站。不幸的是,这意味着有时数据库模式并不总是有意义。

话虽如此,我正在尝试使用 Criteria API 构建以下 HQL 查询

from TableB b where b.id = :id and b.TableAProperty.UserId = :userId

上面的 HQL 语句生成 SQL,它将仅选择并返回 TableB,这是我想要发生的。但是使用如下所示的 Critera API 语句,生成的 SQL 语句会选择 TableB 和 TableA 的字段。

DataProvider.Session
    .CreateCriteria<TableB>()
    .Add(Expression.Eq("Id", id))
    .CreateCriteria("TableA")
    .Add(Expression.Eq("UserId", userId))
    .UniqueResult<TableB>()
    ;

在一个完美的世界中,我可以更新数据库模式以使其更有意义,但可惜我不能。对此的任何帮助将不胜感激。

【问题讨论】:

    标签: nhibernate hibernate icriteria criteria-api


    【解决方案1】:

    您的问题没有显示与 TableA 和 TableB 关联的类,因此我将假设这些类是 TableA 和 TableB,并且 TableB 有一个名为 TableA 的属性。

    DataProvider.Session
        .CreateCriteria<TableB>()
        .Add(Expression.Eq("Id", id))
        .CreateAlias("TableA", "a")
        .Add(Expression.Eq("a.UserId", userId))
        .UniqueResult<TableB>();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-18
      • 2012-04-09
      • 2011-08-19
      • 1970-01-01
      • 2020-10-02
      • 2012-02-07
      • 1970-01-01
      相关资源
      最近更新 更多