JPQL não funciona

Bom dia.

Pessoal…

Albuns e Foto … A entidade Albuns tem um List de Foto veja … e quero faze um select aonde me retorne Todos Albuns aonde o atributo publicado da
Foto é igual a ‘SIM’

TENHO ESSE JPQL QUE LISTA OS ALBUNS , só que ele lista com atributo publicado SIM, mesmo que esteja NAO, ou seja “parece” que ele ignora a clausula " f.publicado = :p"

public List<Album> buscarAlbunsDoCliente(Integer idCliente) throws Exception {   
        em = getEntityManager();   
  
        List<Album> albuns = new ArrayList<Album>();   
        try {   
            Query consultaCliente = em.createQuery("SELECT p FROM Pessoa p WHERE p.id = :id ");   
            consultaCliente.setParameter("id", idCliente);   
            Pessoa pessoa = (Pessoa) consultaCliente.getSingleResult();   
  
            if (pessoa.getPerfil().equals(Perfil.ADMINISTRADOR)) {   
                Query consulta = em.createQuery("SELECT DISTINCT a from Album a INNER JOIN a.fotos f WHERE f.publicado = :p  ");   
                consulta.setParameter("p", Publicado.SIM);   
                albuns = consulta.getResultList();   
            } else {   
                Query consulta = em.createQuery("SELECT DISTINCT a from Album a INNER JOIN a.fotos f WHERE f.publicado = 'SIM' AND a.cliente.id = :id  ");   
                consulta.setParameter("id", idCliente);   
                albuns = consulta.getResultList();   
                   
            }   
        } catch (Exception e) {   
            e.printStackTrace();   
            throw e;   
        } finally {   
            em.close();   
            return albuns;   
        }

Ja este SELECT

     Query consulta = em.createQuery("SELECT  a FROM Album a WHERE a.fotos.publicado = :p ");   
     consulta.setParameter("p", Publicado.SIM);   
     abuns = consulta.getResultList();  

porem gera este EXCEÇÃO

java.lang.IllegalArgumentException: org.hibernate.QueryException: illegal attempt to dereference collection [album0_.id.fotos] with element property reference [publicado] [SELECT  a FROM entidades.Album a WHERE a.fotos.publicado = :p ]   
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1201)   
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1147)   
    at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:275)   
    at persistencias.AlbumDAO.buscarAlbunsDoCliente(AlbumDAO.java:33)   
    at negocios.AlbumBO.buscarAlbunsDoCliente(AlbumBO.java:53)   
    at apresentacao.AlbumVisualizacaoMB.buscarAlbunsDoCliente(AlbumVisualizacaoMB.java:137)   
    at apresentacao.AlbumVisualizacaoMB.<init>(AlbumVisualizacaoMB.java:51)   
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)   
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)   
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)   
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)   
    at java.lang.Class.newInstance0(Class.java:355)   
    at java.lang.Class.newInstance(Class.java:308)   
    at com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:188)   
    at com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:102)   
    at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:409)   
    at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:269)   
    at com.sun.faces.el.ManagedBeanELResolver.resolveBean(ManagedBeanELResolver.java:244)   
    at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:116)   
    at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)   
    at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)   
    at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:69)   
    at org.apache.el.parser.AstValue.getValue(AstValue.java:112)   
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)   
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)   
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)   
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)   
    at javax.faces.component.UIOutput.getValue(UIOutput.java:169)   
    at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205)   
    at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355)   
    at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164)   
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)   
    at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312)   
    at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185)   
    at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129)   
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)   
    at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:58)   
    at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:46)   
    at org.primefaces.component.panel.PanelRenderer.encodeContent(PanelRenderer.java:225)   
    at org.primefaces.component.panel.PanelRenderer.encodeMarkup(PanelRenderer.java:148)   
    at org.primefaces.component.panel.PanelRenderer.encodeEnd(PanelRenderer.java:75)   
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)   
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1763)   
    at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)   
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)   
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1756)   
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)   
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)   
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:401)   
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)   
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)   
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)   
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)   
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:410)   
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)   
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)   
    at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)   
    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:127)   
    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:298)   
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)   
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)   
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)   
    at java.lang.Thread.run(Thread.java:662)   
Caused by: org.hibernate.QueryException: illegal attempt to dereference collection [album0_.id.fotos] with element property reference [publicado] [SELECT  a FROM entidades.Album a WHERE a.fotos.publicado = :p ]   
    at org.hibernate.hql.ast.tree.DotNode$1.buildIllegalCollectionDereferenceException(DotNode.java:68)   
    at org.hibernate.hql.ast.tree.DotNode.checkLhsIsNotCollection(DotNode.java:558)   
    at org.hibernate.hql.ast.tree.DotNode.resolve(DotNode.java:243)   
    at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:117)   
    at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:113)   
    at org.hibernate.hql.ast.HqlSqlWalker.resolve(HqlSqlWalker.java:880)   
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1330)   
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4471)   
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:3944)   
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2047)   
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:831)   
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:617)   
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:301)   
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:244)   
    at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:254)   
    at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:185)   
    at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)   
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)   
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)   
    at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:124)   
    at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)   
    at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)   
    at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1770)   
    at org.hibernate.ejb.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:272)   
    ... 66 more  

Abaixo segue a estrutura das tabelas…

Enum salva SIM ou NAO no banco

public enum Publicado { SIM,NAO;   
  
  
  private Boolean publicado;   
  
  Publicado(){   
  
  
  }   
  
    public Boolean getPublicado() {   
        if(this.equals(Publicado.SIM)){   
            this.publicado = Boolean.TRUE;   
        }else{   
            this.publicado = Boolean.FALSE;   
        }   
        return publicado;   
    }   
  
    public void setPublicado(Boolean publicado) {   
        this.publicado = publicado;   
    }   
  
} 

Foto e Album

Foto   
  
public class Foto implements Serializable{   
  
    @Id   
    @GeneratedValue(strategy = GenerationType.IDENTITY)   
    @Column(name = "id", nullable = false)   
    private Integer id;   
    @Column(name = "nome", nullable = true)   
    private String nome;   
    @Lob     
    private byte[] foto;   
    @Enumerated(value=EnumType.STRING)   
    @Column(name = "publicado", nullable = false)   
    private Publicado publicado;   
    @Column(name = "selecionada", nullable = false)   
    private Boolean selecionada;   
    @Transient   
    private String selecionadaAuxiliar;   
    @Temporal(javax.persistence.TemporalType.DATE)   
    @Column(name = "dataPublicacao", nullable = true)   
    private Date dataPublicada;   
    @Transient   
    private StreamedContent streamedContent;   
     
  
Album   
  
public class Album  implements Serializable{   
  
    @Id   
    @GeneratedValue(strategy = GenerationType.IDENTITY)   
    @Column(name = "id", nullable = false)   
    private Integer id;   
    @OneToOne(cascade=CascadeType.DETACH)   
    private Pessoa cliente;   
    @OneToMany(cascade=CascadeType.ALL , fetch=FetchType.EAGER)   
//    @JoinColumn(name="fotos", referencedColumnName="id")   
    @Column(name = "fotos", nullable = false)   
    private List<Foto> fotos;   
    @Column(name = "descricao", nullable = true)   
    private String descricao; 

Obrigado pessoal

Pessoa, o problema esta no SELECT mesmo

veja o correto

     Query consulta = em.createQuery("SELECT DISTINCT a FROM Album a JOIN FETCH a.fotos f WHERE f.publicado = :publicado ");
                consulta.setParameter("publicado", Publicado.SIM);
                albuns = consulta.getResultList();

Opa amigo, você poderia mostrar como ficou seu manageBean e a JSP? Estou fazendo algo parecido.

Abraço.

Por favor, não poste seus títulos de tópicos usando SOMENTE LETRAS MAIÚSCULAS.