NetBeansを使ってMeigaraクラスを作成
NetBeansでMeigaraクラスを開きます。まずは図1のようにmeigaraテーブルのカラムに相当するフィールドを宣言します。次にこれらのフィールドのgetter/setterメソッドを作成します。
NetBeansの場合、[リファクタリング]-[フィールドをカプセル化]をクリックすると、[フィールドをカプセル化]画面が表示されます。右側にある[全てを選択]ボタンをクリックし、さらに[リファクタリング]をクリックするとsetter/getterメソッドが作成されます。
ここからEntityクラス特有のコーディングをします。最初は、class宣言の前にEntityアノテーションとTableアノテーションを記述します。javax.persistence.Entityクラスとjavax.persistence.Tableクラスもimportします。
アノテーションを記述するたびにimport文を書くのは面倒です。NetBeansに限らず、Eclipseや他の商用の開発環境のほとんどが、エラーの場合、どのような対応をすべきか候補を挙げてくれます。NetBeansの場合も図2のように行番号の15、16行目ところに電球のアイコンが表示され、ここをクリックすると対処方法の候補が表示されます。15行目の電球をクリックすると、[javax.persistence.Entityをインポートに追加]を含め4つの解決策の候補が表示されるはずです。[javax.persistence.Entityをインポートに追加]をクリックするとjavax.persistence.Entityのimport文が自動的に追加されます。
これ以降の説明でJPA関連のアノテーションを説明する場合、同様な操作をするものとし操作自体の説明は割愛します。Tableアノテーションも同様に操作して確認してください。
次にテーブルのカラムとフィールドの紐づけをColumnアノテーションで行います。主キーに紐づける場合はColumnアノテーションの前にIdアノテーションを付けます。ここまでのコードがリスト1です。フィールドはnameのみ表示しています。他の項目も同様にColumnアノテーションを付けます。
001:@Entity 002:@Table(name = "MEIGARA") 003:public class Meigara implements Serializable { 004: 005: private int id = 0; 006: private String name = ""; 007: private String nameKana = ""; 008: private int dosu = 0; 009: private String koji = ""; 010: private String sweetPotatoName = ""; 011: private String manufacturer = ""; 012: private float volume = 0f; 013: private int price = 0; 014: 015: @Id 016: @Column(name = "ID") 017: public int getId() { 018: return id; 019: } 020: 021: public void setId(int id) { 022: this.id = id; 023: } 024: 025: @Column(name = "NAME") 026: public String getName() { 027: return name; 028: } 029: 030: public void setName(String name) { 031: this.name = name; 032: }
次に、リスト2のように引数のないコンストラクタと全てのフィールドに値を設定するコンストラクタを追加します。
001: public Meigara() { 002: } 003: 004: public Meigara( 005: int id, 006: String name, 007: String nameKana, 008: int dosu, 009: String koji, 010: String sweetPotatoName, 011: String manufacturer, 012: float volume, 013: int price) { 014: this.id = id; 015: this.name = name; 016: this.nameKana = nameKana; 017: this.dosu = dosu; 018: this.koji = koji; 019: this.sweetPotatoName = sweetPotatoName; 020: this.manufacturer = manufacturer; 021: this.volume = volume; 022: this.price = price; 023: }
以上で、MeigaraクラスはEntityクラスの要件を満たしました。ただしクラス宣言の箇所で「プロジェクトに持続性ユニットがありません」という警告が出ています。これは無視してはいけない警告です。JPAの表舞台のプレイヤーでは説明しませんでしたが、大切な裏方さんであるため作成する必要があります。
電球のアイコンをクリックすると[持続性ユニットを作成]と表示されるのでクリックします。[持続性ユニットを作成]画面が表示されます。[持続性ユニット名]はデフォルトで表示されている「JPASample01PU」をそのまま指定します(別の名前で構いません)。[持続性ライブラリ]のデフォルトは「EclipseLink」となっていますが、今回はTopLinkを使用しているためリストから「TopLink」を選択します。
[データベース接続]は「実装のための準備」の説明通り行っていれば「jdbc:mysql://localhost:3306/imoshop」がリストに表示されているはずで、それを選択します。[表生成の方針]は既にmeigaraテーブルを作成しているので[なし]のラジオボタンをチェックし、[作成]ボタンをクリックします。
プロジェクトタブの[JPASample01]-[ソースパッケージ]の下に[META-INF]が、さらにその下にpersistence.xmlが作成されているはずです。このXMLファイルの内容を確認すると図3のようにMySQLのimoshopスキーマに接続するための情報が記述されています。[持続性ユニットを作成]だけではEntityクラスの情報が不足しているため、class要素としてjp.kawakubo.Meigaraを手で追加しています。Entityクラスを作成するたびにpersistence.xmlにクラスを追加していくことになります。