Mis estimados rudos. Un poco de Java, Hibernate y T-SQL

Bueno, ser rudo no es tan malo como suele decir. En este periodo QBit esta desarrollando un proyecto utilizando Java con Hibernate, Faces y Microsoft SQL; y necesitabamos tener un entidad cuya información se extraiga de un Procedimiento Almacenado o SP (por sus siglas en ingles Stored Procedure). Vayamos al grano mis estimados entusiastas de la programación:

Supongamos que tenemos la siguiente estructura:

public class MiTablaSP
{
private int id;
private String nombreTablaSP;
 
public int getId()
{
return id;
}
 
public void setId(int id)
{
this.id = id;
}
 
public String getNombreTablaSP()
{
return nombreTablaSP;
}
 
public void setId(String nombreTablaSP)
{
this.nombreTablaSP = nombreTablaSP;
}
}

Ahora veamos el mapeo que son los archivos con extensión hbm:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
  <class name="MiTablaSP" table="MiTablaSP">
    <id column="id" name="id">
      <generator class="native"/>
    </id>
    <property column="nombreTablaSP" name="nombreTablaSP"/>
  </class>
</hibernate-mapping>
</xml>

Yo sé que para los expertos de la materia me podrían decir que puedo mapear el resultado del SP con los campos de mi objeto de la siguiente manera:

<sql-query callable="true" name="SP_MiTablaSP">
    <return alias="SP_MiTablaSP" class="MiTablaSP">
      <return-property column="id" name="id"/>
      <return-property column="nombreTablaSP" name="nombreTablaSP"/>
    </return>
 
    { call SP_MiTablaSP }
</sql-query>
</xml>

Pero tendría que invocarlo por SP en ves de que nativamente lo llene Hibernate. Continuemos, hay que crear el SP:

CREATE PROCEDURE SP_MiTablaSP
AS
SELECT 1 AS ID
'PRUEBA' AS nombreTablaSP

El penúltimo paso es crear un link:

EXEC sp_addlinkedserver
@server = 'local',
@srvproduct = '',
@provider='SQLNCLI',
@datasrc = @@SERVERNAME

Por útlmo solo hay que crear una vista:

CREATE VIEW MiTablaSP
AS
SELECT * FROM openquery(LOCAL, 'miBaseDatos.dbo.MiTablaSP')

Pues espero que les sea de mucha utilidad y recuerden “El conocimiento mutuo enriquece a todos” 😀

Analista/Desarrollador y cofundador de QBit Mexhico. Tecnologías utilizadas Android, Java (EJB, Servlets, Faces, Groovy & Grails, Maven, Swing), .Net (C#, VB, ASP, MVC), Delphi, Spring, Hibernate, DTSx, Oracle, T-SQL, Firebird, MySQL, MongoDB, NodeJs, ReactJs (Flux). Sistemas Operativos Mac, Ubuntu y Windows.

Twitter LinkedIn 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *