Поскольку ваши таблицы журналов аудита имеют одни и те же столбцы, вы можете создать представление, которое «унифицирует» эти таблицы и сопоставляет один класс Java для этого представления. Думаю, вы можете, так как вам не нужно писать обновления, я думаю.
В качестве альтернативы использование собственных запросов было бы хорошим выбором.
EDIT:
1) Если ваши журналы аудита являются уже просмотров, вы можете создать представление на основе других представлений, если вы не хотите, чтобы создать класс отображения Java для каждого из них , Не забудьте добавить фиктивный столбец, который имеет значение 1
, если строка исходит из «первого» журнала аудита, 2
, если он исходит из второго и т. Д., Поэтому вы можете установить их отдельно.
2) Для того, чтобы использовать собственные запросы, предполагая, что ваш провайдер настойчивость Hibernate, вы можете сделать, как в этом примере:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("test");
EntityManager em = emf.createEntityManager();
Session sess = em.unwrap(Session.class); // <-- Use Hibernate-specific features
SQLQuery query = sess.createSQLQuery(
"SELECT AVG(age) AS averageAge, AVG(salary) as averageSalary FROM persons");
query.setResultTransformer(Transformers.aliasToBean(MyResult.class));
MyResult result = (MyResult) query.list().get(0);
где MyResult
объявлен следующим образом:
public class MyResult {
private BigDecimal averageAge;
private BigDecimal averageSalary;
public BigDecimal getAverageAge() {
return averageAge;
}
public void setAverageAge(BigDecimal averageAge) {
this.averageAge = averageAge;
}
public BigDecimal getAverageSalary() {
return averageSalary;
}
public void setAverageSalary(BigDecimal averageSalary) {
this.averageSalary = averageSalary;
}
}
и Таблица persons
выглядит следующим образом (синтаксис MySQL):
CREATE TABLE `persons` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`firstname` varchar(255) NOT NULL,
`lastname` varchar(255) NOT NULL,
`age` int(11) NOT NULL,
`salary` int(11) NOT NULL,
PRIMARY KEY (`id`)
);
Вы можете легко адаптировать этот пример к вашим потребностям, просто замените persons
и MyResult
тем, что вы хотите.
Что живучесть поставщик, который вы используете? Eclipselink имеет подсказку ResultType, которая могла бы помочь http://www.eclipse.org/eclipselink/api/2.2/org/eclipse/persistence/config/ResultType.html – rootkit