監査ログ テーブルは同じ列を共有するため、これらのテーブルを「統合」するビューを作成し、単一の Java クラスをそのビューにマップできます。更新を書く必要がないので、できると思います。
別の方法として、ネイティブ クエリを使用することをお勧めします。
編集:
1) 監査ログが既にビューである場合、ビューごとにマッピング Java クラスを作成したくない場合は、他のビューに基づいてビューを作成できます。1
行が「最初の」監査ログからのものである2
場合、それが 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);
whereMyResult
は次のように宣言されます。
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
ものに置き換えるだけです。