Jpa-entity-managers
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レコードがあります。
この例のすべてのモジュールが完了すると、パッケージとファイルの階層が次のように表示されます。