Select através de stored procedure com Hibernate e JPA

No bost anterior, publiquei a gambis de como fazer insert usando stored procedure. No caso, tive que quebrar a interface do JPA porque não foi viavel usar o JPA direto.

Já para o select deu para usar o NamedQuery, mas tem uns pulos do gato que foi dificil de descobrir.

Primeiro, é preciso definir o nome das colulas nos gets e sets O.o. Muito estranho, para mim era necessario colocar só no nome do parametro mas parece que isso depende da versao do hibernate e do banco de dados.

E eu estou usando uma versão bem velha.

Outro pulo do gato foi o uso obrigatório do resultSetMapping. Para mim, só o resultClass já bastava para o hibernate resolver sozinho o retorno do select, mas a versão que eu to usando deve ser é MUITO BURRA! Então tive que mapear o resultSet usando a annotation @SqlResultSetMapping.

O código explicando tudo isso que escrevi ai em cima tá ai em baixo:

@NamedNativeQuery
(
name="selectTeste",
query="call procedure(:chave)",
resultClass=Teste .class,
resultSetMapping = "mapping"
)
@SqlResultSetMapping(name="mapping",
entities={
@EntityResult(entityClass=br.Teste.class, fields=
{
@FieldResult(name="id", column="ID"),
@FieldResult(name="key", column="IDSESSAO"),
)}
)
@Entity
public class Teste {
@Column(name="`ID`")
private Long id;
@Column(name="`IDSESSAO`")
private String key = null;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="`ID`")
public Long getId() {
return id;
}
@Column(name="`ID`")
public void setId(Long id) {
this.id = id;
}
@Column(name="`IDSESSAO`")
public String getKey() {
return key;
}
@Column(name="`IDSESSAO`")
public void setKey(String key) {
this.key = key;
}
}

Anúncios

Deixe um comentário

Arquivado em Desenvolvimento, Hibernate, Java, JPA

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s