Consulta JPA

Pessoal tenho a seguinte estrutura de entidades

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’

Veja o meu select como está

    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 a FROM Album a WHERE a.fotos.publicado = 'SIM' ");
                albuns = consulta.getResultList();
            } else {
                Query consulta = em.createQuery("SELECT a FROM Album a WHERE a.cliente.id = :id AND a.fotos.publicado = 'SIM'");
                consulta.setParameter("id", idCliente);
                albuns = consulta.getResultList();
            }
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        } finally {
            em.close();
            return albuns;
        }

porem gera a seguinte execeçã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 = 'SIM' ]
        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:31)
        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:405)
        at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:267)
        at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:86)
        at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
        at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72)
        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:102)
        at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:190)
        at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:178)
        at javax.faces.component.UIOutput.getValue(UIOutput.java:168)
        at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205)
        at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:338)
        at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeEnd(HtmlBasicRenderer.java:164)
        at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:878)
        at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:295)
        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:848)
        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:878)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1620)
        at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
        at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:848)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1613)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1616)
        at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:380)
        at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:126)
        at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:127)
        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:313)
        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 = 'SIM' ]
        at org.hibernate.hql.ast.tree.DotNode$1.buildIllegalCollectionDereferenceException(DotNode.java:68)

etc..

Aqui esta a estrutura de entidades, só uma OBSERVAÇÃO o atributo publicado é um ENUM que contem SIM ou NAO no banco

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

//get set

}

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
}

Deste já agradeço

@Column(name = "publicado", nullable = false) private Publicado publicado;

Seria:

[code]@Enumerated(value=EnumType.STRING)
private PublicadoEnum publicado;

[/code]
Cria um Enum de publicado

public Enum PublicadoEnum { SIM,NAO }
tenta ae.

cara , acho que vc nao intendeu, esse enun ja esta criado eu no não coloquei ele ai,

o problema é na consulta que gera a exceção…

muito obrigado

Oba amigo, posta o enum de publicado pra gente ver.

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

}

TENTEI ESSA CONSULTA TBM

  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 a FROM Album a WHERE a.fotos.publicado = true");
                albuns = consulta.getResultList();
            } else {
                Query consulta = em.createQuery("SELECT a FROM Album a WHERE a.cliente.id = :id AND a.fotos.publicado = true");
                consulta.setParameter("id", idCliente);
                albuns = consulta.getResultList();
            }
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        } finally {
            em.close();
            return albuns;
        }

acho que ele grava boolean no banco,não tinha visto direito,enfim contua dando a seguinte exceçãi


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 = true]
        at org.hibernate.hql.ast.tree.DotNode$1.

obrigado

Amigo, acho que você tem que declarar que publicado é verdadeiramente um enum com a anotação @Enumerated(value=EnumType.STRING).
Até então eu acho que ele esta tratando aquele “publicado” como uma Table.
Faça o teste que postei lá em cima, e me desculpe se estiver errado.

mais não tem como funcionar assim?

Não, da uma testada ae, estou sem condições agora, pelo PC horrivel que me encontro.

Beleza vou testar aqui da outra forma, mais tem que ter um forma de funcionar dest jeito

Fiz um pequeno teste com Aluno parecido com o seu Foto e mandei gerar a base.

Apenas com @Column
create table Aluno (periodo integer, statusMatricula integer, id integer not null, curso_id integer, primary key (id))
Vai realmente complicar passando uma String para StatusMatricula. :slight_smile:

Com Anotação @Enumerated(EnumType.STRING)
create table Aluno (periodo integer, statusMatricula varchar(255), id integer not null, curso_id integer, primary key (id))

amigo se eu mudar para enum “colocar a anotação enum”

gera o seguinte erro

GRAVE: Exception loading sessions from persistent storage  
java.lang.NullPointerException  
        at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:768)  
        at org.hibernate.impl.SessionFactoryObjectFactory.getNamedInstance(SessionFactoryObjectFactory.java:159)  
        at org.hibernate.impl.SessionFactoryImpl.readResolve(SessionFactoryImpl.java:753)  
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)  
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  
        at java.lang.reflect.Method.invoke(Method.java:597)  
        at java.io.ObjectStreamClass.invokeReadResolve(ObjectStreamClass.java:1061)  
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1761)  
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)  
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946)  
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1870)  
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)  
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)  
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946)  
        at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:479)  
        at org.hibernate.ejb.AbstractEntityManagerImpl.readObject(AbstractEntityManagerImpl.java:1104)  
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)  
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  
        at java.lang.reflect.Method.invoke(Method.java:597)  
        at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)  
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848)  
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)  
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)  
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946)  
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1870)  
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)  
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)  
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946)  
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1870)  
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)  
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)  
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946)  
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1870)  
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)  
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)  
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)  
        at java.util.HashMap.readObject(HashMap.java:1030)  
        at sun.reflect.GeneratedMethodAccessor21.invoke(Unknown Source)  
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  
        at java.lang.reflect.Method.invoke(Method.java:597)  
        at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)  
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848)  
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)  
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)  
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1946)  
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1870)  
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)  
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)  
        at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1666)  
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1322)  
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)  
        at java.util.HashMap.readObject(HashMap.java:1030)  
        at sun.reflect.GeneratedMethodAccessor21.invoke(Unknown Source)  
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  
        at java.lang.reflect.Method.invoke(Method.java:597)  
        at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)  
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848)  
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)  
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)  
        at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1666)  
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1322)  
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)  
        at java.util.HashMap.readObject(HashMap.java:1030)  
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)  
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  
        at java.lang.reflect.Method.invoke(Method.java:597)  
        at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)  
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848)  
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)  
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)  
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)  
        at java.util.HashMap.readObject(HashMap.java:1030)  
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)  
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  
        at java.lang.reflect.Method.invoke(Method.java:597)  
        at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)  
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1848)  
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)  
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)  
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)  
        at org.apache.catalina.session.StandardSession.readObject(StandardSession.java:1485)  
        at org.apache.catalina.session.StandardSession.readObjectData(StandardSession.java:987)  
        at org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:394)  
        at org.apache.catalina.session.StandardManager.load(StandardManager.java:321)  
        at org.apache.catalina.session.StandardManager.start(StandardManager.java:648)  
        at org.apache.catalina.core.ContainerBase.setManager(ContainerBase.java:446)  
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4630)  
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)  
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)  
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)  
        at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:675)  
        at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:601)  
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)  
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1315)  
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)  
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)  
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1061)  
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)  
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)  
        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)  
        at org.apache.catalina.core.StandardService.start(StandardService.java:525)  
        at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)  
        at org.apache.catalina.startup.Catalina.start(Catalina.java:595)  
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)  
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  
        at java.lang.reflect.Method.invoke(Method.java:597)  
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)  
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)  

eu não queria mudar a estrutura estava funcionando certinhu,queria um jeito de resolver ;D MANTENDO a mesma estrutura

Obrigado

mais alguem?

amigo você pode dar um “desc Foto;” no banco para gente e colar aqui?

Mano se viu como eu mapiei né? era para o album ter um list de Foto, veja como esta

Album
id
descricao
cliente_id

Foto

id
dataPublicacao
foto
publicado
selecionada
fotos

publicado ele esta 0 e 1

tirei o joincolum e ele crio uma tabela intermediaria

select Album_id , descricao , fotos_id , dataPublicacao, foto, nome, publicado, selecionada from album, album_foto, foto WHERE 
album.id = album_foto.Album_id AND
foto.id  =  album_foto.fotos_id AND
foto.publicado = 0 AND
album.cliente_id =: id

em SQL seria assim , como acima

^^?

Cola tudo que você fez até agora, explicar o codigo e tambem diz o que você quer.

tudo que eu fiz até agora , esta na descrição do post na primera mensagem que eu enviei.

É aquela estrutura

se vc observar na entidade Album tem o joinColum da foto eu apenas tirei ele para criar uma tabela intermediaria, a unica coisa que eu quero , e fazer um select aonde me retorne Todos Albuns aonde o atributo publicado da
Foto é igual a 0

mais alguem pessoal pode me ajudaR?

pessoal consegui


  Query consulta = em.createQuery("SELECT a from Album a LEFT JOIN a.fotos f WHERE f.publicado = 0 AND a.cliente.id =: id  ");