2013-05-22 3 views
11

現在JPAを使用してデータベースにマッピングするJava EEシステムがあります。それは約20の実体を持つかなりよく開発されたシステムです。JPAとテーブルビュー。それはできますか?

ここではすべてのビューを使用するように指示されました。例:PERMISSIONというテーブルがある場合は、PERMISSION_VIEWというビューも必要です。基本的には、すべてのテーブルでこれを実行する必要があり、アプリケーションはビューに問い合わせるだけでデータにアクセスできます。それはあなたが唯一のビューを使用することを許可されている場合は、テーブルを更新することが可能であるか、まず

@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 { 

} 
  • は今、私たちのすべてのエンティティBeanは次のようになります。マテリアライズド・ビューはこれに対して機能できますか?

  • 第2に、ビューのみを使用できる場合、どの程度の書き換えが必要になるのでしょうか?例えば。それぞれのエンティティのために、エンティティを記述するのに、更新を行うときにPERMISSIONテーブルに対して行う必要があるため、@テーブル(名前= "PERMISSION_VIEW")と書く必要があります。エンティティBeanでこれをどのように統合しますか?
+0

申し訳ありませんが、誰もこれをやりたいのですか? – kostja

+1

私は大きな組織で働いており、セキュリティや管理目的でビューを使用する必要があると言うどこかの人から書かれたデータベースガイドラインがいくつかあります。 –

+2

アプリケーションにはデータベースへの書き込みアクセス権が必要です。あなたのビューにあなたのテーブルと同じデータが含まれている場合に、これがどのようなセキュリティーやその他の利点をもたらすのか分かりません。 –

答えて

5

最新のRDBMSは、挿入可能なビューと更新可能なビューをサポートしています。 RDBMSでサポートされている場合は、問題はありません。表と同一のビューは、そのようなビューをサポートするRDBMSで更新可能でなければなりません。したがって、マッピングを変更してテーブル名をビュー名に置き換えるだけで済みます。 JPAとデータベースビューを参照詳細については

+0

JPA実装がビューもサポートしている限り(DataNucleus JPAは確かにそうです) – DataNucleus

+2

私が知っているすべてのJPA実装はJDBCに基づいています。 Tがテーブルかビューかどうかにかかわらず、SQLステートメントは同じになります(Tに挿入...)。これは、更新可能なビューをサポートするのはRDBMSのみに依存し、JPAの実装ではそれを知る必要はないと私は考える。私は何かが欠けていない限り。 – nakosspy

11

http://en.wikibooks.org/wiki/Java_Persistence/Advanced_Topics#Views

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