SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

今からでも遅くない、JPAを学ぼう!

今からでも遅くない JPAを学ぼう!(前編)
O/Rマッピングフレームワークへの招待

O/Rマッパーを体験しましょう

  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード サンプルコード (5.3 KB)

NetBeansを使ってMeigaraクラスを作成

 NetBeansでMeigaraクラスを開きます。まずは図1のようにmeigaraテーブルのカラムに相当するフィールドを宣言します。次にこれらのフィールドのgetter/setterメソッドを作成します。

 NetBeansの場合、[リファクタリング]-[フィールドをカプセル化]をクリックすると、[フィールドをカプセル化]画面が表示されます。右側にある[全てを選択]ボタンをクリックし、さらに[リファクタリング]をクリックするとsetter/getterメソッドが作成されます。

図1.フィールド変数の宣言
図1.フィールド変数の宣言

 ここから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アノテーションも同様に操作して確認してください。

 

図2.電球マークは解決策のヒント
図2.電球マークは解決策のヒント

 次にテーブルのカラムとフィールドの紐づけをColumnアノテーションで行います。主キーに紐づける場合はColumnアノテーションの前にIdアノテーションを付けます。ここまでのコードがリスト1です。フィールドはnameのみ表示しています。他の項目も同様にColumnアノテーションを付けます。

リスト1.Meigaraクラス抜粋
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のように引数のないコンストラクタと全てのフィールドに値を設定するコンストラクタを追加します。

リスト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にクラスを追加していくことになります。

図3.persistence.xmlの内容
図3.persistence.xmlの内容

次のページ

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
今からでも遅くない、JPAを学ぼう!連載記事一覧
この記事の著者

川久保 智晴(カワクボ トモハル)

haruプログラミング教室(https://haru-idea.jp/)主宰。COBOL、FORTRANで13年、Javaを中心としたWeb開発で11年。3つしか言語知らないのかというとそうでもなく、sed/awk、Perl、Python, PHP,  C#, JavaScriptなども一時期は業...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5041 2010/04/27 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング