データの登録
今回はデータの登録です。
【前提条件】
[環境]
- JDK 1.7.0_07
- Glassfish 3.1.2.2
- PostgreSQL 9.1(JDBC:postgresql-9.1-901.jdbc4.jar)
【概要】
テーブルへエンティティを登録といっても難しいことはしません。
EntityManager#persistメソッドにエンティティクラスのオブジェクトを渡すだけです。
【サンプルコード】
[テーブル]
前回に作成した「sales」テーブルを使います。
テーブルの定義は前回と変わっていません。
CREATE TABLE sales ( user_id character varying(10) NOT NULL, goods_code character varying(5) NOT NULL, number_of_articles integer, CONSTRAINT sales_primary_key PRIMARY KEY (user_id , goods_code ) )
[Entity]
エンティティのクラスです。
前回のSales1からIdClassの指定を除いたものです。
登録用にシンプルにしただけのもです。
package jp.glory.persistence.entity; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "sales") public class Sales implements Serializable { private static final long serialVersionUID = 1067393173514970977L; @Id @Column(name = "user_id") private String userId = null; @Id @Column(name = "goods_code") private String goodsCode = null; @Column(name = "number_of_articles") private int numberOfArticles = 0; // アクセサメソッドは省略 }
[登録クラス]
登録を行うクラスです。
package jp.glory.ui; import javax.faces.bean.ManagedBean; import javax.faces.bean.RequestScoped; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; import jp.glory.persistence.entity.Sales; @ManagedBean(name = "salesEntryPage") @RequestScoped public class SalesEntryPage { private String userId = null; private String goodsCode = null; private Integer numberOfArticles = null; public void entry() { final EntityManagerFactory factory = Persistence.createEntityManagerFactory("blog"); final EntityManager manager = factory.createEntityManager(); final Sales salesData = new Sales(); salesData.setUserId(userId); salesData.setGoodsCode(goodsCode); salesData.setNumberOfArticles(numberOfArticles); final EntityTransaction transaction = manager.getTransaction(); transaction.begin(); manager.persist(salesData); transaction.commit(); // 登録が終わったのでデータ初期化 userId = null; goodsCode = null; numberOfArticles = null; } // アクセサメソッドは省略 }
EntityManager#persistメソッドにエンティティクラスを渡すだけです。
今回はSalesクラスのオブジェクトを渡しています。
トランザクションの制御は
javax.persistence.EntityTransactionクラスを使用しています。
(実際のシステムでは毎回生成せずにEJBによる
トランザクション管理を行うことになると思います。)
[ページ]
登録用のページです。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html"> <f:view> <h:head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>登録サンプル</title> </h:head> <h:body> <h:form id="entryForm"> <div> ユーザID:<h:inputText id="userId" value="#{salesEntryPage.userId}" /> </div> <div> 商品コード:<h:inputText id="goodsCode" value="#{salesEntryPage.goodsCode}" /> </div> <div> 個数:<h:inputText id="numberOfArticles" value="#{salesEntryPage.numberOfArticles}" /> </div> <div> <h:commandButton action="#{salesEntryPage.entry()}" value="登録" /> </div> </h:form> </h:body> </f:view> </html>
【実行】
【おまけ】
前回の組み込みIDクラスを使った場合の登録です。
package jp.glory.ui; import javax.faces.bean.ManagedBean; import javax.faces.bean.RequestScoped; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; import jp.glory.persistence.entity.Sales2; import jp.glory.persistence.key.EmbeddedIdSalesKey; @ManagedBean(name = "salesEntryPage") @RequestScoped public class SalesEntryPage { private String userId = null; private String goodsCode = null; private Integer numberOfArticles = null; public void entry() { final EntityManagerFactory factory = Persistence.createEntityManagerFactory("blog"); final EntityManager manager = factory.createEntityManager(); final Sales2 salesData = new Sales2(); EmbeddedIdSalesKey key = new EmbeddedIdSalesKey(); key.setUserId(userId); key.setGoodsCode(goodsCode); salesData.setKey(key); salesData.setNumberOfArticles(numberOfArticles); final EntityTransaction transaction = manager.getTransaction(); transaction.begin(); manager.persist(salesData); transaction.commit(); // 登録が終わったのでデータ初期化 userId = null; goodsCode = null; numberOfArticles = null; } // アクセサメソッドは省略 }