![]() |
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はGNUのLGPLで公開、配布されているオープンソースのO/Rマッピングツールです。軽快な動作と実用性の高さでJDOの有力な対抗馬とされています。検索にはHQL(Hibernate Query Language)というSQLに似た独自の問い合わせ言語を使用する方法とオブジェクト指向な設定方法があります。サブクエリや集計関数もサポートするなど、JDOの問い合わせ言語であるJDOQLと比べるとかなり実用度が高いです。 特徴
対応RDBDB2,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した行をトランザクションの終了までロックする。 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();
|