0

假设我使用 Hibernate 创建了一个 Criteria:

Session session = (Session) entityManager.getDelegate();
Criteria rootCriteria = session.createCriteria(entityClass);

如果我没有明确设置别名,Hibernate 将"this"用作别名(我签出,它被硬编码到CriteriaImpl类中。

如果我为此创建一个子标准:

Criteria subCriteria = rootCriteria.createCriteria(associationPath, CriteriaSpecification.LEFT_JOIN);

Hibernate 创建了一个 Subcriteria 的实例,它是一个内部类,CriteriaImpl并且在此过程中它不会为其分配别名。

但是,如果我运行查询并检查我的 SQL 日志,我可以看到 Hibernate 为它创建了一个别名,但仅在我运行查询时。因为我想使用Subcriteria它为我的查询添加限制,所以如果我有一个为我生成的别名会很好。有没有办法让 Hibernate 生成该别名,或者我必须将它们传递给工厂方法?

4

1 回答 1

2

通常在不需要使用别名的情况下链接限制时使用 createCriteria

Criteria crit = session.createCriteria(Order.class)
    .createCriteria("Items")
        .add(Restrictions.gt("count", 1))
        .add(Restrictions.gt("price", 10))
    .list();

会产生

SELECT * FROM orders o join items i ON ... WHERE i.count > 1 and i.price > 10

用别名看起来像

Criteria crit = session.createCriteria(Order.class)
    .createAlias("Items", "item")
    .add(Restrictions.gt("item.count", 1))
    .add(Restrictions.gt("item.price", 10))
    .list();
于 2012-08-30T19:14:03.610 回答