Поскольку в таблицах журналов аудита используются одни и те же столбцы, вы можете создать представление, которое «объединяет» эти таблицы, и сопоставить один класс Java с этим представлением. Я считаю, что вы можете, так как вам не нужно писать обновления, я думаю.
В качестве альтернативы хорошим выбором будет использование нативных запросов.
ИЗМЕНИТЬ:
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
на то, что вам нужно.
person
gd1
schedule
05.03.2013