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

HATTI [E-MAIL ADDRESS DELETED]
2009年 8月 18日 (火) 22:48:25 JST


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

ありがとうございます。
参考にさせていただきます。

以上、よろしくお願いいたします。

2009/08/18 22:09 に kubo<[E-MAIL ADDRESS DELETED]> さんは書きました:
> 久保(jflute)です。
>
> OutsideSqlTestに関しては、この記事からリンクされている
> カンファレンスの資料に(簡単ですが)説明がありますので
> ぜひご覧下さい。
> http://d.hatena.ne.jp/jflute/20080907/1220775232
>
> 2009/8/18 HATTI <[E-MAIL ADDRESS DELETED]>:
>> お世話になっております。
>> hatti です。
>>
>> jflute さん直々にお返事いただけるとはありがたいです。
>> さすがはML!!
>>
>>> OutsideSqlTestタスクを実行することでシーケンス取得のSQLの
>>> 妥当性はチェックすることが可能です。
>> こちら、参考にさせていただきます。
>> まだ学習中なもので、全体が把握できていなくて、、、
>>
>>> これって恐らく別スレッドで話題になっている
>>> 「論理削除連番カラム」で利用するものですよね。
>> これもそのうちの1つですが、
>> 現在仕事のプロジェクトでは、これ以外にも主キー以外のシーケンスを利用しています。
>> 論理削除番号は全テーブル共通のシーケンスですが、
>> 個々のテーブルのみに使用するシーケンスも存在しています。
>>
>> 以上、よろしくお願いいたします。
>>
>> 2009/08/18 21:15 に kubo<[E-MAIL ADDRESS DELETED]> さんは書きました:
>>> 久保(jflute)です。
>>>
>>> hattiさん、こんばんは
>>> 結論からずばり、
>>> 「PK以外のカラムでのシーケンス利用は外だしSQLで」
>>> でお願いします。
>>> タイプセーフをご心配されているようですが、
>>> OutsideSqlTestタスクを実行することでシーケンス取得のSQLの
>>> 妥当性はチェックすることが可能です。
>>>
>>> 個人的には、シーケンスをPK以外で利用することは
>>> ほとんどなく、また、万が一あったとしても利用箇所は
>>> そんなに多くはならないかと。
>>> これって恐らく別スレッドで話題になっている
>>> 「論理削除連番カラム」で利用するものですよね。
>>> それに関してはそちらのスレッドにて。
>>>
>>> #
>>> # mokkouyouさん、西山さん、フォローありがとうございます!
>>> # とてもとても助かります。
>>> #
>>>
>>> 2009/8/11 西山 はじめ <[E-MAIL ADDRESS DELETED]>:
>>>> 西山です。
>>>>
>>>>> シーケンス名などを外から文字列などで渡すと、
>>>>> シーケンス名(DB定義)が変わった際に、タイプセーフに再自動生
>>>> 成できないのかなと
>>>>> 考えています。
>>>>
>>>> シーケンス名の自動生成は、無かったと思います。
>>>>
>>>> シーケンスに対応しているテーブル名、カラム名が固定であるので
>>>> したら(SEQ_というSUFFIXで固定など・・・)、bsentity.dbmeta
>>>> パッケージにDBのメタ情報が含まれてますので、そちらを利用出来
>>>> ます。
>>>>
>>>> テーブル名=HogeTableDbm.getInstance().getTableDbName;
>>>> カラム名=HogeTableDbm.getInstance().columnFooBar().
>>>> getColumnDbName()
>>>>
>>>> あとは、mokkouyouさんのおっしゃったとおりに、DbMetaにシーケ
>>>> ンスと対応付けるよう実装してみるくらいでしょうか。
>>>>
>>>> 以上よろしくお願いいたします。
>>>>
>>>> [2009/08/11 14:37] HATTI さんは書きました。:
>>>>> hatti です。
>>>>> ご回答ありがとうございます。
>>>>>
>>>>>> mokkouyouさんのおっしゃっている通り、現時点のDBFluteでは主
>>>>>> キー以外のSequenceを特定のカラムと対応付ける機能は無いと思い
>>>>>> ます。(調べた限りでは・・・ですが)
>>>>> 私も色々と検索したのですが、やはりそうですか。
>>>>>
>>>>>> hattiさんが行いたいことは、「insert時にシーケンスに対応して
>>>>>> いるカラムの値を自動設定したい」だと思うのですが、
>>>>> これも行いたい事の1つなのですが、
>>>>> シーケンス名などを外から文字列などで渡すと、
>>>>> シーケンス名(DB定義)が変わった際に、タイプセーフに再自動生成できないのかなと
>>>>> 考えています。
>>>>> (※static にテーブル名など取得できるんでしたっけ??)
>>>>> まだ dbflute の経験が短いので、浅い知識で申し訳ございません。
>>>>>
>>>>>> ・必要なシーケンス値を取得する外だしSQLを用意する。
>>>>>> ・対象テーブルのexbhvに、シーケンスを取得するメソッドを用意
>>>>>> する。
>>>>>> ・対象テーブルのexbhvで、insertメソッドをオーバーライドし、
>>>>>> 対象のカラムがNullならば、シーケンスを取得して設定をする処理
>>>>>> を入れる。(bsbhvのinsertの中も忘れずに記述する)
>>>>> こちらも参考にさせていただきます。今日の夜にでも試してみます。
>>>>>
>>>>>> テーブル名を渡して取得したい場合は、シーケンスを取得する
>>>>>> Oracleのプロシージャを作成して、テーブル名を渡すようにした方
>>>>>> が良いと思います。
>>>>> 了解しました。
>>>>> 私のほうでも試してみて、やはり無理ならプロシージャで考えて見ます。
>>>>>
>>>>>> 今回はあまり環境についての差異はありませんが、使用している
>>>>>> バージョンによって仕様や動作が違ったりすることがありますので
>>>>>> DBFluteとOracleのバージョンは明記した方がいいと思います。
>>>>> 了解しました。今後は心がけます。
>>>>> ちなみに、DBFluteは9.5.2で、OracleはExpressEdition(10g) です。
>>>>>
>>>>> 以上、よろしくお願いいたします。
>>>>>
>>>>> 2009/08/11 13:59 に 西山 はじめ<[E-MAIL ADDRESS DELETED]> さんは書きました:
>>>>>> お世話になっております。
>>>>>> 西山です。
>>>>>>
>>>>>> 解決していそうですが、横から失礼します。
>>>>>> 見当違いの場合はスルーしてください。
>>>>>>
>>>>>> 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 mailing list
>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>>>>
>>>>> _______________________________________________
>>>>> 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 mailing list
>>>> [E-MAIL ADDRESS DELETED]
>>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>>
>>> _______________________________________________
>>> Seasar-user mailing list
>>> [E-MAIL ADDRESS DELETED]
>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>
>> _______________________________________________
>> Seasar-user mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>


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