hibernate生成:来自同一查询的不同别名



我们注意到(Hibernate 3.6.3 Final(,日志中的同一查询生成不同的SQL语句(内部联接(。

这种行为不具有确定性有什么原因吗?

在我们自己的研究中,我们发现别名是以这种方式生成的(org.hibernate.mapping.Column(,我们不需要找出导致这种算法在两个相同的输入之间变化的线索。。。

public String getAlias(Dialect dialect) {
String alias = name;
String unique = Integer.toString(uniqueInteger) + '_';
int lastLetter = StringHelper.lastIndexOfLetter(name);
if ( lastLetter == -1 ) {
alias = "column";
}
else if ( lastLetter < name.length()-1 ) {
alias = name.substring(0, lastLetter+1);
}
if ( alias.length() > dialect.getMaxAliasLength() ) {
alias = alias.substring( 0, dialect.getMaxAliasLength() - unique.length() );
}
boolean useRawName = name.equals(alias) && 
!quoted && 
!name.toLowerCase().equals("rowid");
if ( useRawName ) {
return alias;
}
else {
return alias + unique;
}
}

可能的原因是Hibertante中的一个错误,直到4.1.10版本才修复:https://hibernate.atlassian.net/browse/HHH-2448

最新更新