3

在我们的系统中,我们的数据库如下所示

一个机构有很多券商,一个券商有很多用户,一个用户有很多订单。

我正在尝试使用休眠条件来查找指定经纪商下用户的所有订单。在纯 SQL 中,这将非常容易。我可以在标准 api 中执行此操作吗?我发现条件 api 在单击和过滤类型 uis 时特别有效,因为您可以构建一个无序的限制列表并将它们添加到条件中。

目前我有这个不起作用

final Session session = (Session) entityManager.getDelegate();
    final Brokerage brokerage = userAdmin.loadBrokerage(brokerageId);
    @SuppressWarnings({"UnnecessaryLocalVariable", "unchecked"})
    final List<UserOrder> userOrders = session
            .createCriteria(UserOrder.class)
            .add(Restrictions.eq("user.brokerage", brokerage))
            .list();

我收到消息“引起:org.hibernate.QueryException:无法解析属性:user.brokerage of:com.printlogix.rp.server.domain.UserOrder:”。

你能像“object.parentobject.property”一样将参数名称传递给Restrictions.eq吗?

4

1 回答 1

6

您不能像在 HQL 中那样链接关联。相反,您需要定义子标准或别名:

Criteria c = session.createCriteria(UserOrder.class);
Criteria userCriteria = c.createCriteria("user");
userCriteria.add(Restrictions.eq("brokerage", brokerage));

或者

Criteria c = session.createCriteria(UserOrder.class);
c.createAlias("user", "user");
c.add(Restrictions.eq("user.brokerage", brokerage));

这记录在Criteria 的 javadocHibernate 参考文档中。

于 2011-08-08T21:06:41.817 回答