Java Hibernate何时为子标准创建别名?

Java Hibernate何时为子标准创建别名?,java,hibernate,hibernate-criteria,Java,Hibernate,Hibernate Criteria,假设我使用Hibernate创建一个条件: Session session = (Session) entityManager.getDelegate(); Criteria rootCriteria = session.createCriteria(entityClass); 如果我没有明确设置别名,Hibernate将使用“this”作为别名(我已签出,并将其硬编码到CriteriaImpl类中) 如果我为此创建一个子标准: Criteria subCriteria = rootCrite

假设我使用Hibernate创建一个条件:

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为它创建了一个别名,但只有在我运行查询时才创建。因为我想使用此
子标准为我的查询添加限制,如果为我生成一个别名就好了。有没有办法让Hibernate生成该别名,或者我必须将它们传递给e工厂方法?

当链接限制而不需要使用别名时,通常使用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();