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” 😀