[Seasar-user:18251] Re: DBFlute でシーケンス値取得

西山 はじめ [E-MAIL ADDRESS DELETED]
2009年 8月 11日 (火) 13:59:04 JST


お世話になっております。
西山です。

解決していそうですが、横から失礼します。
見当違いの場合はスルーしてください。

mokkouyouさんのおっしゃっている通り、現時点のDBFluteでは主
キー以外のSequenceを特定のカラムと対応付ける機能は無いと思い
ます。(調べた限りでは・・・ですが)

hattiさんが行いたいことは、「insert時にシーケンスに対応して
いるカラムの値を自動設定したい」だと思うのですが、この場合、
以下の方法で実現できると思います。

・必要なシーケンス値を取得する外だしSQLを用意する。
・対象テーブルのexbhvに、シーケンスを取得するメソッドを用意
する。
・対象テーブルのexbhvで、insertメソッドをオーバーライドし、
対象のカラムがNullならば、シーケンスを取得して設定をする処理
を入れる。(bsbhvのinsertの中も忘れずに記述する)

シーケンスの値だけ取得したいのでしたら、シーケンス取得用のメ
ソッドだけでいいと思います。

Oracleではシーケンスとカラムの関連を設定できない為、DBFlute
で、dfpropで設定された内容と、DBの定義を関連付けています。
DBFluteでも最後には、「SELECT SEQUENCE_NAME.NEXTVAL FROM
DUAL」 を呼んでいるだけです。

テーブル名を渡して取得したい場合は、シーケンスを取得する
Oracleのプロシージャを作成して、テーブル名を渡すようにした方
が良いと思います。

普通の外だしSQLで、
SELECT /*param*/SEQUENCE_NAME
.NEXTVAL FROM DUAL
は、試したことがありますがダメでした。
(バインド変数を使っているからかもしれませんが・・・)

あと、最後に1つだけですが、
> もし質問方法が間違っていたらご指摘ください。

今回はあまり環境についての差異はありませんが、使用している
バージョンによって仕様や動作が違ったりすることがありますので
DBFluteとOracleのバージョンは明記した方がいいと思います。


[2009/08/11 11:56] mokkouyou さんは書きました。:
> mokkouyouです。
> 
> jfluteさんが1週間程度お休みとのこと(http: 
> //d.hatena.ne.jp/jflute/20090806)ですので、
> 的外れかもしれませんが、「私なら」ということで。
> 
> 内部を軽く覗いて見ましたが、
> sequenceDefinitionMap.dfpropではどうにもなりそうにありませんね。
> 
> 別に、SQL本体を外だしSQLにしないでも、
> ・exbhvなどに、シーケンスの値を取得するメソッドを用意する。
> ・Entityの組み立て時に、明示的にシーケンスを取得して設定する。
> としてもいいのではないでしょうか。
> 
> シーケンスの取得に関して、
> そこの部分はどうしますかねぇ。。。というところですが、
> 
> SQL文を実行する方法ってありましたっけ?(生で実行以外に)
> 
> ない場合、
> オーソドックスに行くのであれば、
> ・シーケンス取得SQLを外だしSQL
> 
> はたまた、
> ・PKで自動生成されるBsBhvの箇所を参考にして
> dbflute-runtime/src/main/java/org/seasar/dbflute/bhv/AbstractBehaviorWritable.java 
> 辺りのメソッドと
> SelectNextValCommandを利用して頑張ってみる。
> とかでしょうか。
> 
> SelectNextValCommandはDbMetaを利用しているので、
> DbMetaの該当部分をオーバーライドしたサブクラスなどをを
> 渡してあげればいけそうな気もしますね。バージョンアップに弱くなりそうですが。
> 
> 以上宜しくお願いいたします。
> 
> 2009/08/11 9:48 HATTI <[E-MAIL ADDRESS DELETED] <mailto:[E-MAIL ADDRESS DELETED]>>:
> 
>     はじめまして hatti と申します。
>     メーリングリストに投稿するのは初めてなもので、
>     もし質問方法が間違っていたらご指摘ください。
> 
>     現在 DBFlute + Oracle で、学習を進めているのですが、
>     シーケンス(Sequence)についてわからない点がございます。
> 
>     sequenceDefinitionMap.dfprop ファイルに、テーブルにひもづく
>     Sequenceを1つ設定できるのはわかったのですが(主キー用など)、
>     1テーブルに対して複数のSequenceを設定できないのでしょうか。
> 
>     主キーだけでなく、その他のカラムにもシーケンス値を
>     利用したい場合はどのように記述するのでしょうか。
>     外だしSQLにしないと対応できないのでしょうか。
> 
>     以上、よろしくお願いいたします。
>     _______________________________________________
>     Seasar-user mailing list
>     [E-MAIL ADDRESS DELETED] <mailto:[E-MAIL ADDRESS DELETED]>
>     https://ml.seasar.org/mailman/listinfo/seasar-user
> 
> 
> 
> 
> -- 
> mokkouyou
> [E-MAIL ADDRESS DELETED] <mailto:[E-MAIL ADDRESS DELETED]>
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user


-- 
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
株式会社フジミック 
        システム開発センター ソフトウェア開発部
 西山 創
[E-mail]:[E-MAIL ADDRESS DELETED]
 
〒140-0002 東京都品川区東品川3-32-42 フジテレビ別館7階
[TEL]:03-5495-1060
++++++++++++++++++++++++++++++++++++++++++++++++++++++++



Seasar-user メーリングリストの案内