JPQL - Consulta

Pessoal é o seguinte

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

segue a estrutura.

FOTO

@Entity
@Table(name = "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;
  

    //Construtor
    public Foto() {
        this.setPublicado(Publicado.NAO);
        this.setSelecionada(Boolean.FALSE);
     }
//getset
}

ENUM PUBLICADO SALVA 0 E 1 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;
    }

}

Album

@Entity
@Table(name = "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;

    //Construtor
    public Album(){
        this.setCliente(new Pessoa());
        this.setFotos(new ArrayList<Foto>());

    }

    //Get e Set
}

Obrigado

alguem?

Pessoal alguem poderia ao menos me dar um norte?

Cara, aqui está seu erro

Você coloca o parâmetro sempre como sim, talvez seja necessário ter um if ai ou algo assim para mudar esse valor…se não, sua query nunca vai mudar, entendeu?

Não intendi…parametro = SIM era pra retornar SOMENTO os SIM

Não é assim que funciona?

Então desculpe, não entendi a sua dúvida. Achei que você queria trazer as fotos que também não estivessem publicadas.

eu quero trazer SOMENTE as fotos que foram publicadas

Bom, até onde eu vi é o seguinte, se você mapear certo as suas entidades, não há necessidade de criar inner join dentro da JPQL. Ela tá mapeada com a chave não precisa do inner join, mas não sei se é esse seu problema

Abç

Pessoal alguem poderia me ajudar?

Pessoal ajuda aee

Ainda nessa veja minha mudança…

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;

SELECT

  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();

Como vc pode observar deixei como ENUM o campo PUBLICADO mesmo assim este select me retorna os PUBLICADOS e os NAO PUBLICADOS

ja este SELECT

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

gera a seguinte EXCEÇÃO

Hibernate: select pessoa0_.id as id7_, pessoa0_.ativo as ativo7_, pessoa0_.celular as celular7_, pessoa0_.cpf as cpf7_, pessoa0_.dataNascimento as dataNasc5_7_, pessoa0_.email as email7_, pessoa0_.enviaEmail as enviaEmail7_, pessoa0_.eviaSms as eviaSms7_, pessoa0_.nome as nome7_, pessoa0_.perfil as perfil7_, pessoa0_.senha as senha7_, pessoa0_.telefone as telefone7_ from Pessoa pessoa0_ where pessoa0_.id=? limit ?
java.lang.IllegalArgumentException: org.hibernate.QueryException: Unable to resolve path [a.fotos], unexpected token [a] [SELECT  a FROM entidades.Album 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: Unable to resolve path [a.fotos], unexpected token [a] [SELECT  a FROM entidades.Album WHERE a.fotos.publicado = :p ]
	at org.hibernate.hql.ast.tree.IdentNode.resolveAsNakedComponentPropertyRefLHS(IdentNode.java:219)
	at org.hibernate.hql.ast.tree.IdentNode.resolve(IdentNode.java:108)
	at org.hibernate.hql.ast.tree.DotNode.resolveFirstChild(DotNode.java:175)
	at org.hibernate.hql.ast.HqlSqlWalker.lookupProperty(HqlSqlWalker.java:576)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.addrExpr(HqlSqlBaseWalker.java:4774)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.addrExprLhs(HqlSqlBaseWalker.java:5300)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.addrExpr(HqlSqlBaseWalker.java:4759)
	at org.hibernate.hql.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1326)
	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

ajuda ae pessoal

^^

Se publicado é um boolean na BD porque não é Boolean na tua entidade?

A excepção é porque falta um “a” no SELECT

Se publicado é um boolean na BD porque não é Boolean na tua entidade?

no meu banco ele é um enum que salva um string SIM ou NAO , este atributo boolena é so para ele responder certo do checkbox

vdd ta faltando um a,vou testar

Mudei o SELECT , coloquei o a


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

Mais gero a seguinte 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

RESOLVI … 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();