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@Override
public T getReportById
(int code,
String entityName,
String[] properties,
String conditions
) {
if(properties != null || properties.isEmpty()) {
for(String property
: properties
) { // si la propiedad actual es la última no agregamos coma
if(properties.indexOf(property) == properties.size() - 1) {
querySQL += "x." + property;
} else {
querySQL += "x." + property + ",";
}
querySQL += " FROM " + entityName + " x";
}
if(conditions != null) {
querySQL += " WHERE " + conditions;
}
if (properties == null && conditions == null) {
querySQL += " x FROM " + tableName + " x";
}
// creas la consulta y obtienes el reporte
T report = em.createQuery(querySQL).getSingleResult();
return report;
}
Y en el DAO concreto:
Código Java:
Ver original@Override
public Report getReportById() {
return super.getReportById(100L, "CI_REPORTE", {"fechaReporte", "tipoReporte", "otraPropiedad"}, null);
}
Y obtendrías la fecha del reporte, tipo de reporte y otra columna. Es una idea, si se me ocurre algo te lo comento.