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