Jpa-orm-components

提供:Dev Guides
移動先:案内検索

JPA-ORMコンポーネント

最新のアプリケーションのほとんどは、リレーショナルデータベースを使用してデータを保存します。 最近、多くのベンダーがデータデータベースの負担を軽減するためにオブジェクトデータベースに切り替えました。 これは、オブジェクトデータベースまたはオブジェクトリレーショナルテクノロジが、保存、取得、更新、およびメンテナンスを処理していることを意味します。 このオブジェクトリレーショナルテクノロジーの中核部分は、orm.xmlファイルのマッピングです。 xmlはコンパイルを必要としないため、少ない管理で複数のデータソースを簡単に変更できます。

オブジェクトリレーショナルマッピング

オブジェクトリレーショナルマッピング(ORM)では、ORMとは何か、どのように機能するかについて簡単に説明します。 ORMは、オブジェクト型からリレーショナル型へ、またはその逆にデータを変換するプログラミング機能です。

ORMの主な機能は、データベース内のデータにオブジェクトをマッピングまたはバインドすることです。 マッピング中に、データ、データのタイプ、および他のテーブルの自己エンティティまたはエンティティとの関係を考慮する必要があります。

高度な機能

  • 慣用的な永続性:オブジェクト指向クラスを使用して永続性クラスを作成できます。
  • 高性能:多くのフェッチ技術と期待できるロック技術があります。
  • 信頼性:安定性が高く、優れています。 多くの産業プログラマーが使用します。

ORMアーキテクチャ

ここでは、ORMアーキテクチャに従います。

オブジェクトリレーショナルマッピング

上記のアーキテクチャは、オブジェクトデータが3つのフェーズでリレーショナルデータベースに格納される方法を説明しています。

フェーズ1

*Object data* フェーズという名前の最初のフェーズには、POJOクラス、サービスインターフェイス、およびクラスが含まれます。 これは、ビジネスロジックの操作と属性を持つ主要なビジネスコンポーネントレイヤーです。

たとえば、従業員のデータベースをスキーマとして取り上げましょう。

  • 従業員のPOJOクラスには、ID、名前、給与、指定などの属性が含まれます。 そして、これらの属性のセッターおよびゲッターメソッドのようなメソッド。
  • Employee DAO/Serviceクラスには、従業員の作成、従業員の検索、従業員の削除などのサービスメソッドが含まれています。

フェーズ2

2番目のフェーズは、 mapping または persistence フェーズと呼ばれ、JPAプロバイダー、マッピングファイル(ORM.xml)、JPAローダー、およびオブジェクトグリッドが含まれます。

  • * JPAプロバイダー*:JPAフレーバー(javax.persistence)を含むベンダー製品。 たとえば、Eclipselink、Toplink、Hibernateなど。
  • マッピングファイル:マッピングファイル(ORM.xml)には、POJOクラスのデータとリレーショナルデータベースのデータ間のマッピング構成が含まれています。
  • * JPAローダー*:JPAローダーはキャッシュメモリのように機能し、リレーショナルグリッドデータをロードできます。 データベースのコピーのように機能し、POJOデータのサービスクラス(POJOクラスの属性)と対話します。
  • オブジェクトグリッド:オブジェクトグリッドは、リレーショナルデータのコピーを保存できる一時的な場所です。 キャッシュメモリのような。 データベースに対するすべてのクエリは、最初にオブジェクトグリッド内のデータに対して実行されます。 コミットされて初めて、メインデータベースに影響を与えます。

フェーズ3

3番目のフェーズは、リレーショナルデータフェーズです。 これには、ビジネスコンポーネントに論理的に接続されているリレーショナルデータが含まれています。 上記で説明したように、ビジネスコンポーネントがデータをコミットする場合にのみ、データベースに物理的に保存されます。 それまで、変更されたデータはグリッド形式としてキャッシュメモリに保存されます。 データを取得するプロセスも同じです。

上記の3つのフェーズのプログラムによる相互作用のメカニズムは、オブジェクトリレーショナルマッピングと呼ばれます。

Mapping.xml

mapping.xmlファイルは、EntityクラスをデータベーステーブルにマッピングするようJPAベンダーに指示します。

4つの属性を含むEmployeeエンティティの例を見てみましょう。 Employee.java という名前のEmployeeエンティティのPOJOクラスは次のとおりです。

public class Employee {

   private int eid;
   private String ename;
   private double salary;
   private String deg;

   public Employee(int eid, String ename, double salary, String deg) {
      super( );
      this.eid = eid;
      this.ename = ename;
      this.salary = salary;
      this.deg = deg;
   }

   public Employee( ) {
      super();
   }

   public int getEid( ) {
      return eid;
   }

   public void setEid(int eid) {
      this.eid = eid;
   }

   public String getEname( ) {
      return ename;
   }

   public void setEname(String ename) {
      this.ename = ename;
   }

   public double getSalary( ) {
      return salary;
   }

   public void setSalary(double salary) {
      this.salary = salary;
   }

   public String getDeg( ) {
      return deg;
   }

   public void setDeg(String deg) {
      this.deg = deg;
   }
}

上記のコードは、EmployeeエンティティPOJOクラスです。 eid、ename、salary、degの4つの属性が含まれています。 これらの属性はデータベースのテーブルフィールドであり、eidはこのテーブルの主キーであると考えてください。 次に、そのための休止状態マッピングファイルを設計する必要があります。 mapping.xml という名前のマッピングファイルは次のとおりです。

<? xml version="1.0" encoding="UTF-8" ?>

<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
   http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
   version="1.0">

   <description> XML Mapping file</description>

   <entity class="Employee">
      <table name="EMPLOYEETABLE"/>
      <attributes>

         <id name="eid">
            <generated-value strategy="TABLE"/>
         </id>

         <basic name="ename">
            <column name="EMP_NAME" length="100"/>
         </basic>

         <basic name="salary">
         </basic>

         <basic name="deg">
         </basic>

      </attributes>
   </entity>

</entity-mappings>

エンティティクラスをデータベーステーブルにマッピングするための上記のスクリプト。 このファイル内

  • <entity-mappings> :タグは、XMLファイルへのエンティティタグを許可するスキーマ定義を定義します。
  • <description> :タグは、アプリケーションに関する説明を定義します。
  • <entity> :タグは、データベースのテーブルに変換するエンティティクラスを定義します。 属性クラスは、POJOエンティティクラス名を定義します。
  • <table> :タグはテーブル名を定義します。 クラス名をテーブル名として保持する場合、このタグは必要ありません。
  • <attributes> :タグは属性(テーブル内のフィールド)を定義します。
  • <id> :タグはテーブルの主キーを定義します。 <generated-value> タグは、Automatic、Manual、Sequenceから取得したプライマリキー値の割り当て方法を定義します。
  • <basic> :タグは、テーブルの残りの属性を定義するために使用されます。
  • <column-name> :タグは、ユーザー定義のテーブルフィールド名を定義するために使用されます。

アノテーション

一般に、Xmlファイルは特定のコンポーネントの構成、またはコンポーネントの2つの異なる仕様のマッピングに使用されます。 この場合、xmlをフレームワークで個別に管理する必要があります。 つまり、マッピングxmlファイルを作成するときに、POJOクラスの属性をmapping.xmlファイルのエンティティタグと比較する必要があります。

解決策は次のとおりです。クラス定義では、注釈を使用して構成部分を記述できます。 注釈は、クラス、プロパティ、およびメソッドに使用されます。 注釈は「@」記号で始まります。 アノテーションは、クラス、プロパティ、またはメソッドが宣言される前に宣言されます。 JPAのすべての注釈は、javax.persistenceパッケージで定義されています。

例で使用されている注釈のリストを次に示します。

Annotation Description
@Entity This annotation specifies to declare the class as entity or a table.
@Table This annotation specifies to declare table name.
@Basic This annotation specifies non constraint fields explicitly.
@Embedded This annotation specifies the properties of class or an entity whose value instance of an embeddable class.
@Id This annotation specifies the property, use for identity (primary key of a table) of the class.
@GeneratedValue This annotation specifies, how the identity attribute can be initialized such as Automatic, manual, or value taken from sequence table.
@Transient This annotation specifies the property which in not persistent i.e. the value is never stored into database.
@Column This annotation is used to specify column or attribute for persistence property.
@SequenceGenerator This annotation is used to define the value for the property which is specified in @GeneratedValue annotation. It creates a sequence.
@TableGenerator This annotation is used to specify the value generator for property specified in @GeneratedValue annotation. It creates a table for value generation.
@AccessType This type of annotation is used to set the access type. If you set @AccessType(FIELD) then Field wise access will occur. If you set @AccessType(PROPERTY) then Property wise assess will occur.
@JoinColumn This annotation is used to specify an entity association or entity collection. This is used in many- to-one and one-to-many associations.
@UniqueConstraint This annotation is used to specify the field, unique constraint for primary or secondary table.
@ColumnResult This annotation references the name of a column in the SQL query using select clause.
@ManyToMany This annotation is used to define a many-to-many relationship between the join Tables.
@ManyToOne This annotation is used to define a many-to-one relationship between the join Tables.
@OneToMany This annotation is used to define a one-to-many relationship between the join Tables.
@OneToOne This annotation is used to define a one-to-one relationship between the join Tables.
@NamedQueries This annotation is used for specifying list of named queries.
@NamedQuery This annotation is used for specifying a Query using static name.

Java Bean標準

Javaクラス。インスタンスの値と動作を単一のユニット呼び出しオブジェクトにカプセル化します。 Java Beanは、一時的なストレージおよび再利用可能なコンポーネントまたはオブジェクトです。 これは、インスタンス属性を個別に初期化するためのデフォルトのコンストラクターとゲッターとセッターのメソッドを持つシリアル化可能なクラスです。

Beanの規則

  • Beanには、デフォルトのコンストラクターまたはシリアル化されたインスタンスを含むファイルが含まれます。 したがって、BeanはBeanをインスタンス化できます。
  • Beanのプロパティは、ブールプロパティと非ブールプロパティに分離できます。
  • 非ブールプロパティには、 getter および setter メソッドが含まれます。
  • ブール型プロパティには setter および is メソッドが含まれます。
  • プロパティの Getter メソッドは、小文字の「get」で始まり(javaメソッドの規則)、大文字で始まるフィールド名で続く必要があります。 E.g. フィールド名は「salary」です。したがって、このフィールドの取得メソッドは「getSalary()」です。
  • プロパティの Setter メソッドは、小文字の「set」で始まり(javaメソッドの規則)、大文字で始まるフィールド名と、フィールドに設定する引数値が続く必要があります。 E.g. フィールド名は「salary」です。したがって、このフィールドの設定メソッドは「setSalary(double sal)」です。
  • ブールプロパティの場合、trueまたはfalseであるかどうかを確認するメソッドです。 E.g. ブール型プロパティ「空」、このフィールドのメソッドは「isEmpty()」です。