2011年10月3日月曜日

db4oで、フィールドのユニーク制限を行なう

最近、db4oを利用しています。
db4oって言うのは何かといいますと、オープンソースのオブジェクト指向データベースのことです。
サーバサイドだけでなく、PCネイティブアプリや、スマートフォンなどでも利用されているようです。

利用用途が多いのは喜ばしいことなのですが、自分がdb4oを利用しようと思ったのは、別のところにあります。

プログラミングはオブジェクト指向、データストアはRDBというスタイルはいまだに定番だと思いますが、この場合オブジェクトとリレーショナルデータという、そもそも性質が違うものを一緒に扱うことに嫌気がさしてきたのです。

もちろん、そのように思う人は世の中にたくさんいるわけで、これらを一緒に扱うためにHibernateなどのORM(オブジェクトとRDBを繋ぐプログラム)が存在します。ただ、このORMをブラックボックスとして簡単に取り扱えるほど甘くはなく、それなりに時間がかかってしまうのです。

こんな時、ORMをマスターするより、構成をシンプルにしたほうがいいジャン、って思う性質なので何いいものないかなぁ〜と探していたときに見つけたのがdb4oです。

このdb4oずっと開発が続けられているのはいいことなのですが、旬は数年前だったようです。(遅ればせながらJavaEE や Springに苦戦していた頃でしょうか。)

時折、このブログでサンプルを上げていこうと思います。

今日はとりあえず、ユニーク制限のかけ方のプログラミング例です。

  // コンフィググレーション↓
  EmbeddedConfiguration configuration = Db4oEmbedded.newConfiguration();
  // ユニークとするフィールドをインデックス↓
  configuration.common().objectClass(Person.class).objectField("name")
    .indexed(true);
  // さらにユニーク制限を加える↓
  configuration.common().add(
    new UniqueFieldValueConstraint(Person.class, "name"));
  // DBオープン↓
  EmbeddedObjectContainer rootContainer = Db4oEmbedded.openFile(
    configuration, "db4o.db");

  try {
   Person person1 = new Person("津上", "090-9999-9999");
   rootContainer.store(person1);
   rootContainer.commit();
  } catch (UniqueFieldValueConstraintViolationException e) {
   System.out.println(e.getClass());
   rootContainer.rollback();
  }

0 件のコメント:

コメントを投稿