PASONATECH


[ホーム]
[最新エントリー]
[あすなろBLOG]
[あすなろNEXTBLOG]
[あすなろカウンセラーBLOG]
[インタビュー]
[スペシャルコンテンツ]
[テックスペース]


プログラマ2.0日報


前へ

杉浦 こずえ

2009年02月23日

オブジェクトとリレーションの狭間...

というのは、今少しややこしい対応をしているんです。

それはですね、最初はこういうことでした...

申請された内容が、まだ他人から承認されていないのならば、申請者によって取り下げができるようにして欲しい....

まあ、やりたいことは判ります。けども、

「承認アクション」と「取り下げアクション」がもし競合したらどうしよう?

という問題、おそらく「取り下げができるようにしてね!」と依頼した依頼元は想像してないであろう問題が発生するわけです....ここらへん、川上と実装者の感覚の違いなのですがけどもねぇ、実装者としては「少し工数かかります...」と答えざるを得ないわけです。

で、現実的にはそれぞれのアクションの中での、DB周りの処理では、Spring+Hibernate なので、サービス単位でトランザクションが管理されるようになっていて、

トランザクションがかかっている単位(サービス)の中は、アトミックと見ていい

ことになるから、サービスの中で「他の利用者による更新が競合しているか?」について TestAndSet をする格好になるでしょうか。

しかし、ここで、Hibernate がO/Rマッピングだ、という事実がすこし邪魔になります....現実問題として、Hibernate がキャッシュを使って「キーが同じなら、インスタンスが同じ!」という仮定で動くことが、困るんですね。「テスト」ができないんです。

言い換えると、「渡されたインスタンスと同じキーを持つデータが、渡されたインスタンス以降に更新されたものかどうかをチェックする」わけですから、「同じキー」で時系列的に後のデータがあるかどうか?というチェックがしたいわけです...しかし、Hibernate は「同じキーなら同じインスタンス」と捉えてしますのです。これ、考えてみれば、

オブジェクトとリレーションの間の裂け目

にしたいことが転がり落ちちゃった....ということにでもなるでしょうか?

まあ、チェック側を HQL ではなくて、SQL 直でやれば、こっそり「今のデータ」を取ることができて、TestAndSet ができたわけですが、何となく釈然とはしないですね。そもそも

リレーションはオブジェクトではない!

という事実から目をそらすための一時しのぎ...なのかも。オブジェクトデータベースならこういうの問題にならない...かもしれません。


前へ

最新エントリー


杉浦 こずえ
2009年02月23日
オブジェクトとリレーションの狭間...
杉浦 こずえ
2009年02月15日
灰色の唄を歌おう...(後編)
杉浦 こずえ
2009年02月13日
灰色の唄を歌おう...(前編)
杉浦 こずえ
2009年02月12日
宛先のない手紙をあなたに
杉浦 こずえ
2009年02月11日
プログラミング文章読本〜インターフェイスの「読みやすさ」

前へ

バックナンバー




ページトップ


[ホーム]
[ブログコンセプト]
[個人情報]
[著作権]


i-mobile

ITエンジニアの仕事見つかる!PASONA TECH

Copyright(C)2006-2011
Pasona Tech. inc.
All Rights Reserved.