Hibernate annotation function/procedure refCursor

Sim PROCEDURE e HIBERNATE não combinam, mas nem sempre podemos escolher né ?

Em um projeto que estamos dando manutenção, tivemos que mudar uma VIEW para FUNCTION(oracle), criando SQLS dinâmicos para melhorar a performance, o projeto esta usando Hibernate e precisávamos mapear essa FUNCTION na mesma Classe que estava a VIEW para não afetar o restante do sistema.

“Pastei” um dia para descobrir como fazer o mapeamento, seguem as minhas dicas e o passo a passo:

1) Ao escrever CALL use ele minúsculo, sim comigo fez diferença!
2) Necessário ter um @id na classe.
3) Para receber o refcusror necessário usar {? = }

Seguem os passos:

1) Primeiro passo seria mapear a classe no xml hibernate.cfg.xml

<mapping class="br.com.beans.Busca" />

2) Colocaremos o annotation para mapear a function/procedure, com parâmetros e retorno refcursor.

@Entity
@NamedNativeQueries({ 
			@NamedNativeQuery(
				name = "spc_nome_alias", 
				query = "{? = call spc_consulta(:param1)}", 
				callable = true, 
				resultClass = Busca.class)
})
public class Busca implements Serializable {

	private static final long serialVersionUID = -9078035524547178562L;

	@Id
	@Column(name = "NOME_COLUNA")
	private String protocolo;

	public String getProtocolo() {
		return protocolo;
	}

	public void setProtocolo(String protocolo) {
		this.protocolo = protocolo;
	}
}

3) Agora conseguiremos acessar a function usando o ALIAS colocado no annotation spc_nome_alias e passando de parâmetro param1 colocado na chamada.

Query query = session.getNamedQuery("spc_nome_alias")
		.setParameter("param1", "byiorio")
List<Busca> lista = query.list();

Qualquer dúvida entre em contato !

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Blue Captcha Image
Atualizar

*

Facebook

Get the Facebook Likebox Slider Pro for WordPress
WordPress SEO fine-tune by Meta SEO Pack from Poradnik Webmastera