テーブルが非常に大きく、さまざまなビジネスタイプに関する契約情報を格納するために使用します。Java ORM、Java Beanをビューにマップすることができます
は実際のビジネスタイプによって異なりますが、そのテーブルの異なる列が使用されます。
私たちはさまざまな業種でそのテーブルの上にビューを作成した場合、これらのビューは、任意のJava ORMフレームワーク
で使用することができますか?
テーブルが非常に大きく、さまざまなビジネスタイプに関する契約情報を格納するために使用します。Java ORM、Java Beanをビューにマップすることができます
は実際のビジネスタイプによって異なりますが、そのテーブルの異なる列が使用されます。
私たちはさまざまな業種でそのテーブルの上にビューを作成した場合、これらのビューは、任意のJava ORMフレームワーク
で使用することができますか?
私はそう信じています。 ViewはDBレベルの抽象化であり、ユーザーは通常のテーブルとまったく同じようにクエリを実行できます。 ORMフレームワークはまさにDBの視点から見た別のユーザーなので、このアプローチはうまくいくはずです。
しかし、私は個人的にはこれが最善の解決策ではないと思います。私は、DBはそれが何をすべきかを行うべきだと考えています。正規化されたデータをテーブルに格納します。 DBからのデータのフィルタリングを含むすべてのロジックの責任を負うビジネス層(この場合はJavaで書かれています)。これは、あなたが言及したビューは、おそらくビジネス層で "実装"されるべきであるということを意味します。たとえば、WHERE句にいくつかの追加条件を追加するアスペクトでDAOをラップすることができるため、Javaで実装された「ビュー」の効果が得られます。これにより、柔軟性などの多くの利点が得られます。
JPAを使用し、ビューを共通の親の子クラスとしてマップします。これにより、親に共通のプロパティーセットを維持しながら、特定の子クラスごとに有効なプロパティーだけをマップすることができます。
HERESに簡単な例:あなたがマッピングされたORMクラスに対して有効であるフィールドを区別するために使用される「タイプ」列と共通のテーブルを持っている上記の例で
@Entity
@Table("myTable")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type", discriminatorType=DiscriminatorType.STRING)
public class Common {
// Common fields, including ID
}
@Entity
@DiscriminatorValue("special1")
public class Specialized1 extends Common {
// Specialized fields here
}
。
インターネットにはかなりのチュートリアルがあります。 Hereのいずれかです。
ORM層は、本質的にちょうどSQLを生成しますので、私は、すべてのSQLがVIEW
ではなくTABLE
に適用することができればVIEW
を使用するとうまくいくと思います。 UPDATE
とINSERT
10のみが問題を抱えている可能性があります。ビューを更新することができればOKです。これが可能かどうかは、VIEW
とRDBMSによって異なります。
ActiveJDBCは、ビューが通常の表であるかのように動作します。 http://javalite.ioにチェックしてください。