HQL Entre duas Tabelas com Tabela Associativa

Olá pessoal do GUJ, gostaria que me tirassem uma dúvida, gerei uma HQL de duas tabelas, porém os dados estão se repetindo e não sei se tem a ver com eu não ter declarado essa tabela associativa na query, e eu acredito que esteja dando esse devido erro ao acessar a jsp.

WARNING: executePhase(RENDER_RESPONSE 6,com.sun.faces.context.FacesContextImpl@1d135b6) threw exception
com.sun.rave.web.ui.appbase.ApplicationException: org.apache.jasper.el.JspPropertyNotFoundException: /protocolo/TipoDocumento.jsp(33,116) '#{currentRow.value['descricao']}' java.lang.IllegalArgumentException: descricao
        at com.sun.rave.web.ui.appbase.faces.ViewHandlerImpl.cleanup(ViewHandlerImpl.java:594)
        at com.sun.rave.web.ui.appbase.faces.ViewHandlerImpl.renderView(ViewHandlerImpl.java:325)
        at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
        at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
        at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
        at com.sun.faces.extensions.avatar.lifecycle.PartialTraversalLifecycle.render(PartialTraversalLifecycle.java:106)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at com.sun.webui.jsf.util.UploadFilter.doFilter(UploadFilter.java:370)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at sislegal.filtroweb.LimpaSessaoFilter.doFilter(LimpaSessaoFilter.java:54)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
Caused by: javax.faces.FacesException: org.apache.jasper.el.JspPropertyNotFoundException: /protocolo/TipoDocumento.jsp(33,116) '#{currentRow.value['descricao']}' java.lang.IllegalArgumentException: descricao
        at javax.faces.component.UIOutput.getValue(UIOutput.java:176)
        at com.sun.webui.jsf.component.StaticText.getValue(StaticText.java:138)
        at com.sun.webui.jsf.component.StaticText.getText(StaticText.java:490)
        at com.sun.webui.jsf.renderkit.widget.StaticTextRenderer.getProperties(StaticTextRenderer.java:88)
        at com.sun.webui.jsf.renderkit.widget.RendererBase.encodeChildren(RendererBase.java:134)
        at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
        at com.sun.webui.jsf.util.RenderingUtilities.renderComponent(RenderingUtilities.java:73)
        at com.sun.webui.jsf.renderkit.html.TableColumnRenderer.encodeChildren(TableColumnRenderer.java:189)
        at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
        at com.sun.webui.jsf.util.RenderingUtilities.renderComponent(RenderingUtilities.java:73)
        at com.sun.webui.jsf.renderkit.html.TableRowGroupRenderer.encodeChildren(TableRowGroupRenderer.java:200)
        at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
        at com.sun.webui.jsf.util.RenderingUtilities.renderComponent(RenderingUtilities.java:73)
        at com.sun.webui.jsf.renderkit.html.TableRenderer.encodeChildren(TableRenderer.java:172)
        at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:812)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
        at com.sun.faces.application.ViewHandlerImpl.doRenderView(ViewHandlerImpl.java:245)
        at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:176)
        at com.sun.rave.web.ui.appbase.faces.ViewHandlerImpl.renderView(ViewHandlerImpl.java:320)
        ... 26 more
Caused by: org.apache.jasper.el.JspPropertyNotFoundException: /protocolo/TipoDocumento.jsp(33,116) '#{currentRow.value['descricao']}' java.lang.IllegalArgumentException: descricao
        at org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:104)
        at javax.faces.component.UIOutput.getValue(UIOutput.java:173)
        ... 52 more
Caused by: java.lang.IllegalArgumentException: descricao
        at com.sun.data.provider.impl.ObjectListDataProvider.getFieldKey(ObjectListDataProvider.java:508)
        at com.sun.data.provider.impl.TableRowDataProvider.getFieldKey(TableRowDataProvider.java:148)
        at com.sun.webui.jsf.faces.DataProviderELResolver$ValueData.getValue(DataProviderELResolver.java:402)
        at com.sun.webui.jsf.faces.DataProviderELResolver.getValue(DataProviderELResolver.java:161)
        at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
        at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:64)
        at org.apache.el.parser.AstValue.getValue(AstValue.java:118)
        at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
        at org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:101)
        ... 53 more

O erro ocorre nesse trecho de código do jsp

<webuijsf:table augmentTitle="false" binding="#{protocolo$TipoDocumento.tblTipoDocumento}" clearSortButton="true" id="tblTipoDocumento"
                            paginateButton="true" paginationControls="true" sortPanelToggleButton="true"
                            style="left: 24px; top: 96px; position: absolute; width: 600px" title="Tipos de Documentos" width="600">
                            <webuijsf:tableRowGroup binding="#{protocolo$TipoDocumento.tableRowGroup1}" id="tableRowGroup1" rows="5"
                                selected="#{SessionBean1.selectedState}" sourceData="#{protocolo$TipoDocumento.oldpTipodoc}" sourceVar="currentRow">
                                <webuijsf:tableColumn id="tableRowGroup1SelectionColumn"
                                    onClick="setTimeout(function(){document.getElementById('form1:groupPanel1:tblTipoDocumento').initAllRows()}, 0);" selectId="tableRowGroup1SelectionChild">
                                    <webuijsf:checkbox id="tableRowGroup1SelectionChild" selected="#{SessionBean1.selected}" selectedValue="#{SessionBean1.selectedValue}"/>
                                </webuijsf:tableColumn>
                                <webuijsf:tableColumn headerText="Tipo Documento" id="colTipoDoc" sort="column1" width="103">
                                    <webuijsf:staticText id="staticText3" text="#{currentRow.value['descricao']}"/>
                                </webuijsf:tableColumn>
                                <webuijsf:tableColumn headerText="Quantidade" id="colQuantidade" sort="column2">
                                    <webuijsf:staticText id="staticText3" text="#{currentRow.value['quantidade']}"/>
                                </webuijsf:tableColumn>
                                <webuijsf:tableColumn headerText="Referência" id="colReferencia" sort="column3">
                                    <webuijsf:staticText id="staticText4" text="#{currentRow.value['referencia']}"/>
                                </webuijsf:tableColumn>
                                <webuijsf:tableColumn headerText="Vencimento" id="colVencimento" sort="column4">
                                    <webuijsf:staticText id="staticText2" text="#{currentRow.value['vencimento']}"/>
                                </webuijsf:tableColumn>
                                <webuijsf:tableColumn headerText="Valor" id="colValor" sort="column5">
                                    <webuijsf:staticText id="staticText5" text="#{currentRow.value['valor']}"/>
                                </webuijsf:tableColumn>
                                <webuijsf:tableColumn headerText="Modelo" id="colModelo" sort="column6">
                                    <webuijsf:staticText id="staticText6" text="#{currentRow.value['modelo']}"/>
                                </webuijsf:tableColumn>
                            </webuijsf:tableRowGroup>
                        </webuijsf:table>

Segue o trecho de código da query

public List recuperaTipoAtributo(String login) {
        List recupera = this.getHibernateTemplate().find("from VOTipoDocProtocolo votidocp, " +
                "VOAtributoDocumento voatdoc " +
                "WHERE votidocp.usuario.login = 'admin' OR votidocp.usuario.login = ?", login);
        return recupera;
    }

Os mapeamentos

<class name="sislegal.protocolo.vo.VOTipoDocProtocolo" table="tipodocumentoprotocolo">
      <id column="COD_TIPODOCUMENTO" name="codTipoDocumento">
          <generator class="increment"/>
      </id>
      <many-to-one class="sislegal.login.vo.VOUsuario" column="usuario_LOGIN" name="usuario"/>
      <property column="DESCRICAO" name="descricao" type="string"/>
  </class>

<class name="sislegal.protocolo.vo.VOAtributoDocumento" table="atributodocumento">
      <id column="COD_ATRIBUTODOCUMENTO" name="codAtributoDoc">
          <generator class="increment"/>
      </id>
      <property column="QUANTIDADE" name="quantidade" type="boolean"/>
      <property column="REFERENCIA" name="referencia" type="boolean"/>
      <property column="VENCIMENTO" name="vencimento" type="boolean"/>
      <property column="VALOR" name="valor" type="boolean"/>
      <property column="MODELO" name="modelo" type="boolean"/>
      <set name="atribDocHasTipoDoc" table="atributodocumento_has_tipodocumento" cascade="all">
          <key column="atributodocumento_COD_ATRIBUTODOCUMENTO" />
          <many-to-many column="tipodocumento_COD_TIPODOCUMENTO" class="sislegal.protocolo.vo.VOTipoDocProtocolo"/>
      </set>
  </class>

E as VOs

public class VOTipoDocProtocolo implements Serializable {
    private Long codTipoDocumento;
    private String descricao;

    private VOUsuario usuario;

    public Long getCodTipoDocumento() {
        return codTipoDocumento;
    }

    public void setCodTipoDocumento(Long codTipoDocumento) {
        this.codTipoDocumento = codTipoDocumento;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public VOUsuario getUsuario() {
        return usuario;
    }

    public void setUsuario(VOUsuario usuario) {
        this.usuario = usuario;
    }
    
    public static VOTipoDocProtocolo getNewVOTipoDocProtocolo(String codigo) {
        Long codigoDocumento = new Long(codigo);
        VOTipoDocProtocolo votdp = new VOTipoDocProtocolo();
        votdp.setCodTipoDocumento(codigoDocumento);
        return votdp;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final VOTipoDocProtocolo other = (VOTipoDocProtocolo) obj;
        if (this.codTipoDocumento != other.codTipoDocumento && (this.codTipoDocumento == null || !this.codTipoDocumento.equals(other.codTipoDocumento))) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 61 * hash + (this.codTipoDocumento != null ? this.codTipoDocumento.hashCode() : 0);
        return hash;
    }
    
}
public class VOAtributoDocumento implements Serializable {
    private Long codAtributoDoc;
    private Boolean quantidade;
    private Boolean referencia;
    private Boolean vencimento;
    private Boolean valor;
    private Boolean modelo;

    private Set<VOTipoDocProtocolo> atribDocHasTipoDoc = new HashSet<VOTipoDocProtocolo>();

    public Long getCodAtributoDoc() {
        return codAtributoDoc;
    }

    public void setCodAtributoDoc(Long codAtributoDoc) {
        this.codAtributoDoc = codAtributoDoc;
    }

    public Boolean getModelo() {
        return modelo;
    }

    public void setModelo(Boolean modelo) {
        this.modelo = modelo;
    }

    public Boolean getQuantidade() {
        return quantidade;
    }

    public void setQuantidade(Boolean quantidade) {
        this.quantidade = quantidade;
    }

    public Boolean getReferencia() {
        return referencia;
    }

    public void setReferencia(Boolean referencia) {
        this.referencia = referencia;
    }

    public Boolean getValor() {
        return valor;
    }

    public void setValor(Boolean valor) {
        this.valor = valor;
    }

    public Boolean getVencimento() {
        return vencimento;
    }

    public void setVencimento(Boolean vencimento) {
        this.vencimento = vencimento;
    }

    public Set<VOTipoDocProtocolo> getAtribDocHasTipoDoc() {
        return atribDocHasTipoDoc;
    }

    public void setAtribDocHasTipoDoc(Set<VOTipoDocProtocolo> atribDocHasTipoDoc) {
        this.atribDocHasTipoDoc = atribDocHasTipoDoc;
    }

}

aproveitando, esse atributo do tipo Set tem de estar nas 2 classes de entidade?
Desde já agradeço