【问题标题】:Hibernate HQL aliasesHibernate HQL 别名
【发布时间】:2015-03-26 15:45:53
【问题描述】:

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

问候, 尼古拉斯

【问题讨论】:

    标签: java hibernate orm hql alias


    【解决方案1】:

    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;
    }
    

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

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 2010-09-24
      • 2021-02-13
      • 1970-01-01
      • 2012-04-22
      • 2012-06-19
      • 2017-12-30
      相关资源
      最近更新 更多