Jpa-entity-managers

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

JPA-エンティティマネージャー

この章では、JPAを使用した簡単な例を紹介します。 例として従業員管理を考えてみましょう。 これは、従業員管理が従業員を作成、更新、検索、削除していることを意味します。 上記のように、データベース操作にMySQLデータベースを使用しています。

この例の主なモジュールは次のとおりです。

  • *モデルまたはPOJO * + Employee.java
  • 永続性 + Persistence.xml
  • サービス + CreatingEmployee.java + UpdatingEmployee.java + FindingEmployee.java + EditingEmployee.java

Eclipselinkを使用したJPAインストールで使用したパッケージ階層を見てみましょう。 次のように、この例の階層に従います。

パッケージ階層

エンティティの作成

エンティティはBeanまたはモデルに他なりません。この例では、エンティティとして Employee を使用します。 * eid、ename、salary、、および *deg は、このエンティティの属性です。 これらの属性のデフォルトのコンストラクタ、セッター、およびゲッターメソッドが含まれています。

上記の階層で、 ‘src’ (ソース)パッケージの下に ‘com.finddevguides.eclipselink.entity’ という名前のパッケージを作成します。 次のように、指定されたパッケージの下に Employee.java という名前のクラスを作成します。

package com.finddevguides.eclipselink.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table
public class Employee {

   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)

   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;
   }

   @Override
   public String toString() {
      return "Employee [eid=" + eid + ", ename=" + ename + ", salary=" + salary + ", deg=" + deg + "]";
   }
}

上記のコードでは、@ Entityアノテーションを使用して、このPOJOクラスをエンティティとして作成しています。

次のモジュールに進む前に、リレーショナルエンティティ用のデータベースを作成する必要があります。これにより、データベースが persistence.xml ファイルに登録されます。 MySQLワークベンチを開き、次のようにクエリを入力します。

create database jpadb
use jpadb

Persistence.xml

このモジュールは、JPAの概念で重要な役割を果たします。 このxmlファイルでは、データベースを登録し、エンティティクラスを指定します。

上記のパッケージ階層では、JPAコンテンツパッケージのpersistence.xmlは次のとおりです。

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

<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
   http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

   <persistence-unit name="Eclipselink_JPA" transaction-type="RESOURCE_LOCAL">

      <class>com.finddevguides.eclipselink.entity.Employee</class>

      <properties>
         <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/jpadb"/>
         <property name="javax.persistence.jdbc.user" value="root"/>
         <property name="javax.persistence.jdbc.password" value="root"/>
         <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
         <property name="eclipselink.logging.level" value="FINE"/>
         <property name="eclipselink.ddl-generation" value="create-tables"/>
      </properties>

   </persistence-unit>
</persistence>

上記のxmlでは、<persistence-unit>タグがJPA永続性の特定の名前で定義されています。 <class>タグは、パッケージ名でエンティティクラスを定義します。 <properties>タグはすべてのプロパティを定義し、<property>タグはデータベース登録、URL指定、ユーザー名、パスワードなどの各プロパティを定義します。 これらはEclipselinkプロパティです。 このファイルはデータベースを構成します。

永続化操作

永続化操作はデータベースに対して使用され、 load および store 操作です。 ビジネスコンポーネントでは、すべての永続化操作がサービスクラスに分類されます。

上記のパッケージ階層で、 ‘src’ (ソース)パッケージの下に ‘com.finddevguides.eclipselink.service’ という名前のパッケージを作成します。 CreateEmloyee.java、UpdateEmployee.java、FindEmployee.java、DeleteEmployee.javaという名前のすべてのサービスクラス。 次のように、指定されたパッケージの下にあります。

従業員を作成

次のように、 CreateEmployee.java という名前のEmployeeクラスを作成します。

package com.finddevguides.eclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.finddevguides.eclipselink.entity.Employee;

public class CreateEmployee {

   public static void main( String[ ] args ) {

      EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );

      EntityManager entitymanager = emfactory.createEntityManager( );
      entitymanager.getTransaction( ).begin( );

      Employee employee = new Employee( );
      employee.setEid( 1201 );
      employee.setEname( "Gopal" );
      employee.setSalary( 40000 );
      employee.setDeg( "Technical Manager" );

      entitymanager.persist( employee );
      entitymanager.getTransaction( ).commit( );

      entitymanager.close( );
      emfactory.close( );
   }
}

上記のコードでは、* createEntityManagerFactory()は、persistence.xmlファイルでpersistence-unitに指定したものと同じ一意の名前を提供することにより、永続性ユニットを作成します。 entitymanagerfactoryオブジェクトは、 createEntityManager()*メソッドを使用してentitymangerインスタンスを作成します。 entitymanagerオブジェクトは、トランザクション管理用のentitytransactionインスタンスを作成します。 entitymanagerオブジェクトを使用することにより、エンティティをデータベースに永続化できます。

上記のプログラムをコンパイルして実行すると、Eclipse IDEのコンソールパネルにあるeclipselinkライブラリから通知を受け取ります。

結果として、MySQLワークベンチを開き、次のクエリを入力します。

use jpadb
select * from employee
*employee* という名前の影響を受けるデータベーステーブルは、次のように表形式で表示されます。
Eid Ename Salary Deg
1201 Gopal 40000 Technical Manager

従業員を更新

従業員を更新するには、レコードフォームデータベースを取得し、変更を加えて、最終的にコミットする必要があります。 UpdateEmployee.java という名前のクラスは次のように表示されます。

package com.finddevguides.eclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.finddevguides.eclipselink.entity.Employee;

public class UpdateEmployee {
   public static void main( String[ ] args ) {
      EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );

      EntityManager entitymanager = emfactory.createEntityManager( );
      entitymanager.getTransaction( ).begin( );
      Employee employee = entitymanager.find( Employee.class, 1201 );

     //before update
      System.out.println( employee );
      employee.setSalary( 46000 );
      entitymanager.getTransaction( ).commit( );

     //after update
      System.out.println( employee );
      entitymanager.close();
      emfactory.close();
   }
}

上記のプログラムをコンパイルして実行すると、Eclipse IDEのコンソールパネルのEclipselinkライブラリから通知を受け取ります。

結果として、MySQLワークベンチを開き、次のクエリを入力します。

use jpadb
select * from employee
*employee* という名前の影響を受けるデータベーステーブルは、次のように表形式で表示されます。
Eid Ename Salary Deg
1201 Gopal 46000 Technical Manager

従業員の給与1201は46000に更新されます。

従業員を探す

従業員を見つけるには、データベースからレコードを取得して表示します。 この操作では、EntityTransactionは関与せず、レコードの取得中にトランザクションは適用されません。

次のような FindEmployee.java という名前のクラス。

package com.finddevguides.eclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.finddevguides.eclipselink.entity.Employee;

public class FindEmployee {
   public static void main( String[ ] args ) {

      EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
      EntityManager entitymanager = emfactory.createEntityManager();
      Employee employee = entitymanager.find( Employee.class, 1201 );

      System.out.println("employee ID = " + employee.getEid( ));
      System.out.println("employee NAME = " + employee.getEname( ));
      System.out.println("employee SALARY = " + employee.getSalary( ));
      System.out.println("employee DESIGNATION = " + employee.getDeg( ));
   }
}

上記のプログラムをコンパイルして実行すると、次のようにEclipse IDEのコンソールパネルにあるEclipselinkライブラリから出力が得られます。

employee ID = 1201
employee NAME = Gopal
employee SALARY = 46000.0
employee DESIGNATION = Technical Manager

従業員の削除

従業員を削除するには、最初にレコードを見つけてから削除します。 ここで、EntityTransactionは重要な役割を果たします。

次のような DeleteEmployee.java という名前のクラス:

package com.finddevguides.eclipselink.service;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.finddevguides.eclipselink.entity.Employee;

public class DeleteEmployee {
   public static void main( String[ ] args ) {

      EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );
      EntityManager entitymanager = emfactory.createEntityManager( );
      entitymanager.getTransaction( ).begin( );

      Employee employee = entitymanager.find( Employee.class, 1201 );
      entitymanager.remove( employee );
      entitymanager.getTransaction( ).commit( );
      entitymanager.close( );
      emfactory.close( );
   }
}

上記のプログラムをコンパイルして実行すると、Eclipse IDEのコンソールパネルのEclipselinkライブラリから通知を受け取ります。

結果として、MySQLワークベンチを開き、次のクエリを入力します。

use jpadb
select * from employee
*employee* という名前の影響を受けるデータベースには、nullレコードがあります。

この例のすべてのモジュールが完了すると、パッケージとファイルの階層が次のように表示されます。

モジュール