JAVA開発メモ
Hibernate のバックアップ(No.16)
 

[トップ|一覧|単語検索|最終更新|バックアップ|ヘルプ]


概要

 HibernateはGNUのLGPLで公開、配布されているオープンソースのO/Rマッピングツールです。軽快な動作と実用性の高さでJDOの有力な対抗馬とされています。検索にはHQL(Hibernate Query Language)というSQLに似た独自の問い合わせ言語を使用する方法とオブジェクト指向な設定方法があります。サブクエリや集計関数もサポートするなど、JDOの問い合わせ言語であるJDOQLと比べるとかなり実用度が高いです。

NEWS

特徴

対応RDB

DB2,FrontBase?,HSQLDB,informix,interbase,MS SQL server,MySQL, Oracle,Pointbase,PostgreSQL,Sybase etc.

準備するファイル

情報源

Eclipseプラグイン

Eclipse用にHibernate用のプラグインがいくつか存在します。

サンプル

 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();



トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS

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.048 sec.