休眠字段多个别名



我有一个实体,它有collections字段(params)。可能有许多参数。我想为每个唯一的参数创建唯一的联接。即CCD_ 1等

在Hibernate中,当我尝试为同一字段创建别名时,它会抛出异常,并显示关于重复别名的消息。

如何实现字段的多个联接?

我使用的是spring框架、hibernate和postgresql。

提前谢谢。

我假设您正在使用Criteria API。

如果你检查Hibernate的源代码,你可以在这里找到问题:

CriteriaQueryTranslator#createAssociationPathCriteriaMap()
private void createAssociationPathCriteriaMap() {
        Iterator iter = rootCriteria.iterateSubcriteria();
        while ( iter.hasNext() ) {
            CriteriaImpl.Subcriteria crit = ( CriteriaImpl.Subcriteria ) iter.next();
            String wholeAssociationPath = getWholeAssociationPath( crit );
            Object old = associationPathCriteriaMap.put( wholeAssociationPath, crit );
            if ( old != null ) {
                throw new QueryException( "duplicate association path: " + wholeAssociationPath );
            }
            int joinType = crit.getJoinType();
            old = associationPathJoinTypesMap.put( wholeAssociationPath, new Integer( joinType ) );
            if ( old != null ) {
                // TODO : not so sure this is needed...
                throw new QueryException( "duplicate association path: " + wholeAssociationPath );
            }
        }
    }

我使用的是Hibernate 3.3.2。

内部发生的情况是,当您将Criterias添加到根CriteriaHibernate时,它会创建SubCriterias,然后用您尝试使用的所有路径填充Map(检查下面的代码),如果发现重复,它将抛出异常。

因此,例如,如果你试图加入:entity0.entity1,然后你再次尝试加入,你会得到一个Exception。即使使用别名,它也不起作用,因为Hibernate在这里并不关心它们。

如果你不加入两次,你可以解决这个问题,或者你可以使用HQL/JPQL。你可以看看Hibernate的新版本,但我不确定他们是否修复了这个准错误。

相关内容

  • 没有找到相关文章

最新更新