java - Hibernate HQL 别名

标签 java hibernate orm hql alias

我想知道对于给定的 HQL 查询,生成的 SQL 查询是否始终相同,或者是否会有所不同,尤其是在涉及别名时。 我问这个问题是因为我们的 DBA 提示这样一个事实:对于给定的查询,生成的别名可能因应用程序的一次运行而异。 感谢您的帮助。

问候, 尼古拉斯

最佳答案

Hibernate 必须确保唯一的别名,因为您也可以自连接表,并且根据 Hibernate 源代码,org.hibernate.mapping.Column.getAlias() 方法不这样做允许您覆盖默认的唯一别名策略:

public String getAlias(Dialect dialect) {
    final int lastLetter = StringHelper.lastIndexOfLetter( name );
    final String suffix = Integer.toString(uniqueInteger) + '_';

    String alias = name;
    if ( lastLetter == -1 ) {
        alias = "column";
    }
    else if ( name.length() > lastLetter + 1 ) {
        alias = name.substring( 0, lastLetter + 1 );
    }

    boolean useRawName = name.length() + suffix.length() <= dialect.getMaxAliasLength()
            && !quoted && !name.toLowerCase().equals( "rowid" );
    if ( !useRawName ) {
        if ( suffix.length() >= dialect.getMaxAliasLength() ) {
            throw new MappingException( String.format(
                    "Unique suffix [%s] length must be less than maximum [%d]",
                    suffix, dialect.getMaxAliasLength() ) );
        }
        if ( alias.length() + suffix.length() > dialect.getMaxAliasLength() ) {
            alias = alias.substring( 0, dialect.getMaxAliasLength() - suffix.length() );
        }
    }
    return alias + suffix;
}

所以你被那些独特的名字困住了。

关于java - Hibernate HQL 别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29282916/

相关文章:

java - 由于外键约束,删除 JPA 对象失败?

sql - 正确转义原始 Django SQL 查询中的字符串

java - 区分右移 (>>) 和 Java 泛型

java - 在 hibernate 中仅插入子表

java - Hibernate Validator 不检查代理子类的约束

hibernate - DELETE_ORPHAN 和 DELETE 有什么区别?

codeigniter - Doctrine 2 和 CodeIgniter 入门

database - 将 3 个表关系映射到单个实体。 ORM 最佳实践?

java - 在Java中创建三角形按钮

java - 对象的 LinkedList 和 HashMap 的 LinkedList 之间的区别?