¿Como debo obtener el Detalle - Maestro con SprignJDBC?
Que tal comunidad, tengo una duda y quisiera saber si alguno de ud conoce una mejor solución a lo que estoy haciendo. Sucede que tengo relacionadas dos tablas de uno a muchos y quiero obtener los datos que se relacionan entre tablas, sin que tenga que hacer un clase nueva o aumentar los atributos de alguna de las dos.
Esta es mi estructura de las clases:
Lo que hago actualmente es esto:
1.- Obtengo una lista de Empleados según los filtros del controller
2.- Recorro la lista de empleados y busco el objeto Empresa.
3.- Agrego atributos a la clase Empleado, que requiero de la empresa.
4.- Modifico los atributos con los valores del objeto empresa encontrado.
5.- Regreso la lista de Empleados modificada
Lo hago así por que:
Estoy trabajando con el display tag library y la manera mas sencilla que conozco de recorrer una lista y mostrarla en forma de tabla es así:
<display:table name="listaEmpleados" class="its" id="row" requestURI="detalle.htm" >
y cada columan debe ser el atributo del objeto
<display:column property="numEmpleado" title="No. Empleado"/>
Mi pregunta es: ¿Como puedo obtener el detalle de la tabla empresa?, Algo mas o menos así:
<c:out value="${row.empresa.razonSocial}"/>
</display:column>
Bueno espero sus respuestas, gracias.
- Inicie sesión o regístrese para enviar comentarios
modificar
Forzosamente tienes que modificar la clase Empleado para que puedas hacer
row.empresa.razonSocial
porquerow
es un Empleado y no tiene referencia a la empresa (solamente el numero de la misma). De modo que necesitas agregar una propiedadempresa
a la clase Empleado.Si lo que quieres es obtener todos los datos en un solo query usando Spring, pues si tienes un SpringJdbcTemplate puedes crear tu propio RowMapper y hacer un query de JOIN:
SELECT e.numEmpleado, e.numEmpresa, c.razonSocial FROM Empleado e JOIN Empresa c ON e.numEmpresa=c.numEmpresa
El RowMapper debe ser algo así:
public Empleado mapRow(ResultSet rs, int row) throws SQLException {
Empleado e = new Empleado();
e.setNumEmpleado(rs.getInt(1));
e.setNumEmpresa(rs.getInt(2));
Empresa c = new Empresa();
c.setNumEmpresa(rs.getInt(2));
c.setRazonSocial(rs.getString(3));
e.setEmpresa(c);
return e;
}
}
El único detalle es que si varios empleados están en la misma empresa, vas a tener varias instancias repetidas de esa empresa. Si quieres unificar eso para que todos los empleados de la misma empresa realmente apunten a la misma instancia de Empresa, tienes que guardar las empresas que has creado en el RowMapper para que solamente las hagas una vez y las reuses (ponlas en un mapa usando su numEmpresa como llave).
Exacto
Si de hecho tenia duda como hacer ese RowMaper puesto que hago consultas separadas. Y pues bueno finalmente tendre que modificar la clase Empleado, para poder mostrar los datos en el display tag. gracias Enrrique.