Вряд ли это хороший способ сделать это, но кажется, что вы можете получить AST через некоторые внутренние интерфейсы и пройти через это:
QueryTranslator[] translators = hqlPlan.getTranslators();
AST ast = (AST)((QueryTranslatorImpl)translators[0]).getSqlAST();
new NodeTraverser(new NodeTraverser.VisitationStrategy() {
public void visit(AST node) {
if(node.getType() == SqlTokenTypes.FROM_FRAGMENT || node.getType() == SqlTokenTypes.JOIN_FRAGMENT) {
FromElement id = (FromElement)node;
System.out.println(node+": "+id.getClassAlias()+" - "+id.getClassName());
}
}
}).traverseDepthFirst(ast);
Так что, похоже, это извлекает сопоставления псевдонимов из скомпилированного запроса, но я бы очень осторожно использовал это решение: оно преобразует объекты в подклассы, обычно не видимые для hibernate-клиента, и интерпретирует AST на основе угадывания семантики разные узлы. Это может работать не для всех операторов HQL, и может не работать или иметь другое поведение в будущей версии hibernate.