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

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

4

1 回答 1

2

您的问题没有显示与 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>();
于 2010-01-25T12:55:51.527 回答