NHibernate:如何使用 Criteria API 排除属于联接一部分的类

发布于 2024-08-19 13:10:01 字数 603 浏览 5 评论 0原文

我对 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>()
    ;

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

I am still new to Hibernate and am attempting to use it for a web site I have inherited. Unfortunately that means sometimes the db schemas don't always make sense.

With that said, I am trying to build the following HQL query using the Criteria API

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

The above HQL statement generate SQL which will select and return TableB only which is what I want to happen. However using the Critera API statements shown below, the generated SQL statement selects the fields for TableB and TableA.

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

In a perfect world I could update the db schemas to make more sense, but alas I cannot. Any help on this would be greatly appreciated.

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

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

发布评论

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

评论(1

不羁少年 2024-08-26 13:10:01

您的问题没有显示与 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>();

Your question doesn't show the classes associated with TableA and TableB, so I'm going to assume that the classes are TableA and TableB and that TableB has a property called TableA.

DataProvider.Session
    .CreateCriteria<TableB>()
    .Add(Expression.Eq("Id", id))
    .CreateAlias("TableA", "a")
    .Add(Expression.Eq("a.UserId", userId))
    .UniqueResult<TableB>();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文