web-dev-qa-db-ja.com

JPAおよびテーブルビュー。できますか?

現在、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 {

}
  • まず、ビューの使用のみが許可されている場合に、どのようにテーブルを更新することができますか。マテリアライズドビューはこれに使用できますか?
  • 第二に、ビューのみを使用できる場合、どのくらいの書き換えが必要になるのでしょうか?例えば。各エントリについて、@ Table(name = "PERMISSION_VIEW")と記述する必要がありますが、エンティティを記述するために、更新を行うときにPERMISSIONテーブルに対して行う必要があります。一体どのようにエンティティBeanにこれを統合しますか?
21
Oliver Watkins

JPAおよびデータベースビューの詳細については、 http://en.wikibooks.org/wiki/Java_Persistence/Advanced_Topics#Views を参照してください。

JPAでは、@ Tableアノテーションを使用して、テーブルと同じVIEWにマップできます。その後、ビューの各列をオブジェクトの属性にマップできます。ビューは通常読み取り専用であるため、オブジェクトのビューへのマッピングも通常読み取り専用です。ほとんどのデータベースでは、ビューはカプセル化するクエリの複雑さに応じて更新可能です。複雑なクエリの場合でも、通常はデータベーストリガーを使用してビューに更新できます。

22
James

最新のRDBMSは、挿入可能および更新可能なビューをサポートしています。 RDBMSがサポートしている場合、問題はないはずです。テーブルと同一のビューは、そのようなビューをサポートするRDBMSで更新可能である必要があります。したがって、マッピングを変更し、テーブル名をビュー名に置き換えるだけです。

7
nakosspy