Ver Mensaje Individual
  #2 (permalink)  
Antiguo 24/07/2015, 11:41
Avatar de GusGarsaky
GusGarsaky
 
Fecha de Ingreso: febrero-2015
Mensajes: 33
Antigüedad: 9 años, 9 meses
Puntos: 2
Respuesta: Librería para aplicaciones JEE

Es un tema interesante el que propones. Lo particular es que las tablas no serán iguales por lo que ya de por sí tienes un problema importante. Lo que yo haría es, hacer un DAO genérico en el JAR a exportar y en los proyectos crear los DAO concretos para cada tabla (que serán prácticamente clases vacías).

Sobre cómo saber los nombres de las tablas, puedes sobreescribir los métodos en los DAO concretos para pasarle los nombres de las tablas y atributos que necesita el DAO genérico. Por ejemplo:

Código Java:
Ver original
  1. @Override
  2. public T getReportById(int code, String entityName, String[] properties, String conditions) {
  3.     String querySQL = "SELECT ";
  4.  
  5.     if(properties != null || properties.isEmpty()) {
  6.         for(String property : properties) {
  7.         // si la propiedad actual es la última no agregamos coma
  8.             if(properties.indexOf(property) == properties.size() - 1) {
  9.         querySQL += "x." + property;
  10.         } else {
  11.                 querySQL += "x." + property + ",";
  12.         }
  13.     querySQL += " FROM " + entityName + " x";
  14.     }
  15.     if(conditions != null) {
  16.         querySQL += " WHERE " + conditions;
  17.     }
  18.     if (properties == null && conditions == null) {
  19.     querySQL += " x FROM " + tableName + " x";
  20.     }
  21.     // creas la consulta y obtienes el reporte
  22.     T report = em.createQuery(querySQL).getSingleResult();
  23.    
  24.     return report;
  25. }

Y en el DAO concreto:

Código Java:
Ver original
  1. @Override
  2. public Report getReportById() {
  3.     return super.getReportById(100L, "CI_REPORTE", {"fechaReporte", "tipoReporte", "otraPropiedad"}, null);
  4. }

Y obtendrías la fecha del reporte, tipo de reporte y otra columna. Es una idea, si se me ocurre algo te lo comento.