MYSQL para HQL

1 resposta
hqljavamysqlhibernate
H

Tenho o seguinte código em MYSQL:

mysql> select i.id, i.estabelecimento_id, e.* from imagem as i join estabelecimento as e on e.id=i.estabelecimento_id where estabelecimento_id = 2;

gostaria de passar ele para HQL. Eu tentei e ficou mais ou menos assim.

DAO

@SuppressWarnings("unchecked")
public List<Imagem> filtrarImagemEstabelecimentoPeloID(Integer estabelecimento_id) {
	EntityManager em = new JPAUtil().getEntityManager();
	String hql = "select i from Imagem as i where i.estabelecimento.id like :estabelecimento_id";
	
	List<Imagem> resultList = em.createQuery(hql).setParameter("estabelecimento_id", estabelecimento_id).getResultList();
	em.close();
	return resultList;
}

Classe Imagem

package mz.co.mpteventos.springsecurity.model;

import javax.persistence.Basic;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name="imagem")
public class Imagem {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer id;
	
	@Lob
	@Basic(fetch= FetchType.EAGER) 
	private byte[] arquivo;
	
	private String nomeArquivo;
	
	@ManyToOne
	@JoinColumn(name="evento_id")
	private Evento evento;
	
	@ManyToOne
	@JoinColumn(name="estabelecimento_id")
	private Estabelecimento estabelecimento;
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getNomeArquivo() {
		return nomeArquivo;
	}
	public void setNomeArquivo(String nomeArquivo) {
		this.nomeArquivo = nomeArquivo;
	}
	public byte[] getArquivo() {
		return arquivo;
	}
	public void setArquivo(byte[] arquivo) {
		this.arquivo = arquivo;
	}
	public Evento getEvento() {
		return evento;
	}
	public void setEvento(Evento evento) {
		this.evento = evento;
	}
	public Estabelecimento getEstabelecimento() {
		return estabelecimento;
	}
	public void setEstabelecimento(Estabelecimento estabelecimento) {
		this.estabelecimento = estabelecimento;
	}
	
}

Classe estabelecimento

package mz.co.mpteventos.springsecurity.model;

import java.util.Calendar;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
public class Estabelecimento {
	@Id
	@GeneratedValue
	private Integer id;

	private String nomeEstabelecimento;
	private String descricaoEstabelecimento;

	@Temporal(TemporalType.TIMESTAMP)
	private Calendar dataEhoradeOperacaoInicio = Calendar.getInstance();

	@Temporal(TemporalType.TIMESTAMP)
	private Calendar dataEhoradeOperacaoFim = Calendar.getInstance();

	@OneToOne
	private Contacto contacto;

	@OneToOne
	private Local local;

	@ManyToOne
	private Conta conta;
	
	@OneToMany
	private List<Imagem> imagem;

	// getters & setters

	public Contacto getContacto() {
		return contacto;
	}

	public void setContacto(Contacto contacto) {
		this.contacto = contacto;
	}

	public Integer getId() {
		return id;
	}

	public String getNomeEstabelecimento() {
		return nomeEstabelecimento;
	}

	public void setNomeEstabelecimento(String nomeEstabelecimento) {
		this.nomeEstabelecimento = nomeEstabelecimento;
	}

	public Local getLocal() {
		return local;
	}

	public void setLocal(Local local) {
		this.local = local;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getDescricaoEstabelecimento() {
		return descricaoEstabelecimento;
	}

	public void setDescricaoEstabelecimento(String descricaoEstabelecimento) {
		this.descricaoEstabelecimento = descricaoEstabelecimento;
	}

	public Calendar getDataEhoradeOperacaoInicio() {
		return dataEhoradeOperacaoInicio;
	}

	public void setDataEhoradeOperacaoInicio(Calendar dataEhoradeOperacaoInicio) {
		this.dataEhoradeOperacaoInicio = dataEhoradeOperacaoInicio;
	}

	public Calendar getDataEhoradeOperacaoFim() {
		return dataEhoradeOperacaoFim;
	}

	public void setDataEhoradeOperacaoFim(Calendar dataEhoradeOperacaoFim) {
		this.dataEhoradeOperacaoFim = dataEhoradeOperacaoFim;
	}

	public Conta getConta() {
		return conta;
	}

	public void setConta(Conta conta) {
		this.conta = conta;
	}

	public List<Imagem> getImagem() {
		return imagem;
	}

	public void setImagem(List<Imagem> imagem) {
		this.imagem = imagem;
	}
	
}

Ajuda por favor transformar o código MYSQL para HQL

1 Resposta

guilhermebhte

Deu erro ?

Já testou ?

Troque para:

String hql = “select i from Imagem i where i.estabelecimento.id = :estabelecimento_id”;

A principio pelo que vejo é somente isto.

Criado 16 de julho de 2017
Ultima resposta 17 de jul. de 2017
Respostas 1
Participantes 2