現在、JPAを使用してデータベースにマッピングするJava EEシステムがあります。これは、約20のエンティティを持つかなりよく開発されたシステムです。
これで、すべてにビューを使用するように注文されました。例:[〜#〜] permission [〜#〜]というテーブルがある場合、PERMISSION_VIEWというビューも必要です。基本的にすべてのテーブルに対してこれを行う必要があり、アプリケーションはビューにクエリを実行することによってのみデータにアクセスできます。
これで、すべてのエンティティBeanは次のようになります。
@Entity
@Table(name = "PERMISSION")
@NamedQueries({
@NamedQuery(name = "Permission.findByPK", query = "SELECT p FROM Permission p WHERE p.dpNum = :dpNumber"),
@NamedQuery(name = "Permission.deleteAll", query = "DELETE FROM Permission") })
public class Permission implements Serializable {
}
JPAおよびデータベースビューの詳細については、 http://en.wikibooks.org/wiki/Java_Persistence/Advanced_Topics#Views を参照してください。
JPAでは、@ Tableアノテーションを使用して、テーブルと同じ
VIEW
にマップできます。その後、ビューの各列をオブジェクトの属性にマップできます。ビューは通常読み取り専用であるため、オブジェクトのビューへのマッピングも通常読み取り専用です。ほとんどのデータベースでは、ビューはカプセル化するクエリの複雑さに応じて更新可能です。複雑なクエリの場合でも、通常はデータベーストリガーを使用してビューに更新できます。
最新のRDBMSは、挿入可能および更新可能なビューをサポートしています。 RDBMSがサポートしている場合、問題はないはずです。テーブルと同一のビューは、そのようなビューをサポートするRDBMSで更新可能である必要があります。したがって、マッピングを変更し、テーブル名をビュー名に置き換えるだけです。