JAVA開発メモ
Hibernate の変更点
 

[リロード]   [新規|編集|差分|添付]   [トップ|一覧|単語検索|最終更新|バックアップ|ヘルプ]

サイトメニュー
最新の20件
2018-08-012018-02-222016-12-222015-06-242013-07-032013-02-262011-01-122010-06-082010-03-092010-03-032009-12-302009-10-302009-02-252009-02-242009-02-112008-09-242008-09-232008-09-16


  • 追加された行はこの色です。
  • 削除された行はこの色です。
  • Hibernate へ行く。

  *概要
   HibernateはGNUのLGPLで公開、配布されているオープンソースのO/Rマッピングツールです。軽快な動作と実用性の高さでJDOの有力な対抗馬とされています。検索にはHQL(Hibernate Query Language)というSQLに似た独自の問い合わせ言語を使用する方法とオブジェクト指向な設定方法があります。サブクエリや集計関数もサポートするなど、JDOの問い合わせ言語であるJDOQLと比べるとかなり実用度が高いです。
  
  #amazonkey2(hibernate)
  
  *特徴
  -1対1、n対1、1対n、n対nの関係に対応可能
  -XDocletに対応されている
  -Hibernateのみでコネクションプーリングが可能
  -アプリケーションサーバよりデータソースを取得する設定が可能
  -遅延読み込みが可能
  -SQLのサブクエリ、集計関数に対応
  
  *対応RDB
  DB2,FrontBase,HSQLDB,informix,interbase,MS SQL server,MySQL, Oracle,Pointbase,PostgreSQL,Sybase etc.
  
  *準備するファイル
  -接続するDB毎のHibernate設定ファイル(プロパティファイル or XMLファイル)
  -テーブル毎のマッピングファイル(XMLファイル)
  -テーブル毎のJAVAクラスファイル
  
  *情報源
  -[[公式サイト:http://www.hibernate.org/]]
  -[[リファレンスマニュアルの日本語訳:http://www.redhat.com/docs/manuals/jboss/jboss-eap-4.2/ja_JP/html/Hibernate_Reference_Guide/index.html]]
  -[[Working with Hibernate in Eclipse:http://www.onjava.com/pub/a/onjava/2004/06/23/hibernate.html]]
  
  *Eclipseプラグイン
  Eclipse用にHibernate用のプラグインがいくつか存在します。
  -[[JFaceDbc:http://jfacedbc.sourceforge.net/]] - RDBのフロントエンドですが、Hibernate用ソースコード(JAVA,XML)の出力機能があります。
  -[[Hibernator:http://hibernator.sourceforge.net/]] - メタデータからテーブルを作成したり、HQLを発行して結果を確認したりできます。
  -[[Hibernate Synchronizer:http://hibernatesynch.sourceforge.net/]] - 定義ファイルウィザード、ファイルの同期など。
  -[[HiberClipse Plugin:http://hiberclipse.sourceforge.net/]] - 定義ファイルの生成。
  -[[Hibernate Tools for Eclipse:http://tools.hibernate.org//]] - ウィザードによるファイルの生成、マッピングファイルエディタ。
  
  *サンプル
   package test;
   import java.util.List;
   import java.util.Properties;
   import net.sf.hibernate.Hibernate;
   import net.sf.hibernate.HibernateException;
   import net.sf.hibernate.Session;
   import net.sf.hibernate.Transaction;
   import net.sf.hibernate.cfg.Configuration;
   import net.sf.hibernate.expression.Expression;
  
   public class SampleMain {
  
       public static void main(String[] args) {
           Configuration cfg = null;
           Session session = null;
           Transaction transaction = null;
           Properties props = new Properties();
  
           try {
               cfg = new Configuration().addClass(Person.class).addProperties(props);
               session = cfg.buildSessionFactory().openSession();
               //session.setFlushMode(FlushMode.COMMIT);
               transaction = session.beginTransaction();
  
               Person person = new Person();
               person.setName("テスト1");
  
               // 追加の実行と生成されたIDの取得
               Long id = (Long) session.save(person);
  
               // 追加の確認(loadメソッド検索)
               Person load = (Person) session.load(Person.class, id);
               System.out.println(load);
  
               // 修正の実行
               person.setName("テスト2");
               session.update(person);
  
  
               // 修正の確認(HQLによるfindメソッド検索)
               List list = session.find("from Person where id=?", id, Hibernate.LONG);
               System.out.println(list);
               // 修正の確認(Expressionによるfindメソッド検索)
               List list2 =
                   session.createCriteria(Person.class).add(Expression.eq("id", id)).list();
               System.out.println(list2);
  
               // 削除の実行
               session.delete(person);
  
               // 削除の確認
               list = session.find("from Person");
               System.out.println(list);
  
               // SQLのコミット
               transaction.commit();
  
           } catch (Exception e) {
               try {
                   if (transaction != null)
                       transaction.rollback();
               } catch (Exception e1) {
                   e1.printStackTrace();
               }
               e.printStackTrace();
           } finally {
               try {
                   if (session != null && session.isOpen())
                       session.close();
               } catch (HibernateException e1) {
                   e1.printStackTrace();
               }
           }
  
       }
   }
  Personのマッピングファイル
   <?xml version="1.0" encoding="UTF-8"?>
   <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
   <hibernate-mapping>
     <class name="test.Person" table="PERSON">
       <id name="id" column="ID" type="long">
         <generator class="native"/>
       </id>
       <property name="name" column="NAME" type="string" length="20" not-null="true"/>
     </class>
   </hibernate-mapping>
  
  *悲観的ロック
  for update指定でselectした行をトランザクションの終了までロックする。~
  (for update nowaitを指定する場合は、LockMode.UPGRADEをLockMode.UPGRADE_NOWAITに変える)
   Person load = (Person) session.load(Person.class, id, LockMode.UPGRADE);
  
   List list2 = session.createCriteria(Person.class)
                       .add(Expression.eq("id", id))
                       .setLockMode(LockMode.UPGRADE)
                       .list();
  
  ~
  #amazonkey2(JAVA DB)

リロード   新規 編集 差分   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
Last-modified: Wed, 03 Sep 2008 10:12:03 JST (4798d)
Link: FrontPage(2312d)

Modified by MT22(Moriwaki Takashi)

"PukiWiki" 1.3.7 Copyright © 2001,2002,2003 PukiWiki Developers Team. License is GNU/GPL.
Based on "PukiWiki" 1.3 by sng
Powered by PHP 5.3.29

HTML convert time to 0.025 sec.