【DBFlute.NET】 Oracle Viewに対しEntityとConditionBeanが不完全に生成される

99 views
Skip to first unread message

Shinobu Yokoyama (gmail)

unread,
May 22, 2011, 12:10:23 AM5/22/11
to dbf...@googlegroups.com
初めまして!
横山と申します.

Oracle 10gで作成したViewから生成されるEntity, およびConditionBeanについて質問です.

通常のViewから生成されたEntityの場合, カラムに対応したメンバが生成されないのですが, これは仕様なのでしょうか?
通常のViewではなく, 実体のあるMaterialized Viewを使った場合だと, カラムに対応したメンバはEntityに追加されるようですが,
それでもConditionQuery (set*GreaterEqual 等)が生成されません
(CBean/CQ/BS/AbstractBs*CQ.cs で確認).
Materialized View だとスキーマ(project-schema-dfclient.xml) ではTYPEがTABLEになってしまうのも疑問です.

こちらの環境では Materialized Viewを使うことは構わないのですが,
Viewに対してConditionQueryが生成されないと実装の変更が大きくなるため,
確認していただけると非常に助かります. 何卒よろしくお願いします.

※こちらの環境ではDBFlute .NET 0.8.9.20 を使用しています.
(DBFlute.NETの最新は 0.8.9.29 となってますが, ファイル構成など若干の変更を加えており,
重要な変更でない限りバージョンを上げたくないという事情のため, そのままにしています.
ChangeLogでは直面している問題に対する更新が確認できませんでした).


横山
yoko...@dotshell.co.jp

kubo

unread,
May 22, 2011, 7:16:48 AM5/22/11
to dbf...@googlegroups.com
jfluteです。

こちらこそ初めまして、横山さん
そして、DBFluteユーザの集いへようこそ!

> 通常のViewから生成されたEntityの場合, カラムに対応した
> メンバが生成されないのですが, これは仕様なのでしょうか?

仕様ではないですね。普通のVIEWもしっかりテーブルと変わらず
自動生成されなければなりません。そして、こちらの環境では
Oracle 10g (XE) でもJava版でもC#版でも変わらず自動生成できています。

dbflute-oracle-example のSUMMARY_PRODUCTビュー、
dfnet-asp.net-example のSUMMARY_PRODUCTビュー、
共にVIEWのselect句のカラムに対応したプロパティが生成されています。

> ※こちらの環境ではDBFlute .NET 0.8.9.20 を使用しています.

そんなに古いバージョンではないので、そういった現象が
発生すればこちらでも気付いたはずですね。
ただ念のため、業務ではアップグレードできないのは承知で、
試しに最新版にアップグレードして結果が変わるかどうか
確認してみてください。

また、VIEW自体の情報をもう少し詳しく頂けますでしょうか?

VIEWの中で参照しているテーブルはどんなテーブルでしょうか?
例えば、別スキーマのテーブルとか、シノニムとか。
また、そのテーブルに対して権限が付与されていますでしょうか?
そのテーブル自体を自動生成対象とした場合、カラムに対応する
プロパティは自動生成されますでしょうか?

頂いている情報だけで推測すると、VIEWで参照しているテーブルを
特別な状況にあって情報が取得できないのではないかと考えられます。

> Materialized View だとスキーマ(project-schema-dfclient.xml)
> ではTYPEがTABLEになってしまうのも疑問です.

これは Materialized View の特性ですね。View という名前は
(人に対する)論理的なもので、実質的に(内部的に)テーブルで
管理されているからなんじゃないかと思います。

2011/5/22 Shinobu Yokoyama (gmail) <yolc...@gmail.com>:

> --
> このメールは Google グループのグループ「DBFluteユーザの集い」の登録者に送られています。
> このグループに投稿するには、dbf...@googlegroups.com にメールを送信してください。
> このグループから退会するには、dbflute+u...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/dbflute?hl=ja からこのグループにアクセスしてください。
>
>

kubo

unread,
May 22, 2011, 12:03:15 PM5/22/11
to dbf...@googlegroups.com
jfluteです。

>> (DBFlute.NETの最新は 0.8.9.29 となってますが, ファイル構成など若干の変更を加えており,
>> 重要な変更でない限りバージョンを上げたくないという事情のため, そのままにしています.

ちなみに、こちらの
「ファイル構成など若干の変更」
についてですが、
参考までにどういった要件でどういう変更をしているのか
教えて頂けないでしょうか?もし、DBFlute.NETに本質的に
必要なものなのであれば、すぐには無理だとしても将来的には
検討したいと思う内容かもしれないので。

2011/5/22 kubo <dbf...@gmail.com>:

Shine Yolcoyama

unread,
May 23, 2011, 1:49:21 AM5/23/11
to DBFluteユーザの集い
こんにちは、返信ありがとうございます!

テスト用にさらでサーバ(Oracle Database 10g Express Edition Release 10.2.0.1.0)をインス
トールしたところ,
確かにVIEWに対応した(完全な)Entityを作成することができました. またConditionQueryのメソッドも正常に作られていまし
た!
しかし運用DBではなぜ取得できないのかがいまだに不明です.

そこで可能であれば, VIEWのスキーマを取得するためにDBFluteが内部的に行ている処理を教えていただけないでしょうか?
両方のサーバで権限不足の問題の可能性は, 思いつく限り払拭したと思います (両方のサーバでAQ_ADMINISTRATOR_ROLEとDBA
ロールが付加されたSYSTEMユーザで実行).

また, 次のようなViewのスキーマを見るためのクエリをコンソールから直接流したところ, 両方でスキーマが
表示されることを確認しました.

------------------------------
SET LONG 1000
SELECT TEXT FROM USER_VIEWS WHERE VIEW_NAME='DFTESTVIEW';
------------------------------

一体何が問題なのでしょう..?


横山
> 2011/5/22 Shinobu Yokoyama (gmail) <yolcoy...@gmail.com>:
>
>
>
>
>
>
>
> > 初めまして!
> > 横山と申します.
>
> > Oracle 10gで作成したViewから生成されるEntity, およびConditionBeanについて質問です.
>
> > 通常のViewから生成されたEntityの場合, カラムに対応したメンバが生成されないのですが, これは仕様なのでしょうか?
> > 通常のViewではなく, 実体のあるMaterialized Viewを使った場合だと, カラムに対応したメンバはEntityに追加されるようですが,
> > それでもConditionQuery (set*GreaterEqual 等)が生成されません
> > (CBean/CQ/BS/AbstractBs*CQ.cs で確認).
> > Materialized View だとスキーマ(project-schema-dfclient.xml) ではTYPEがTABLEになってしまうのも疑問です.
>
> > こちらの環境では Materialized Viewを使うことは構わないのですが,
> > Viewに対してConditionQueryが生成されないと実装の変更が大きくなるため,
> > 確認していただけると非常に助かります. 何卒よろしくお願いします.
>
> > ※こちらの環境ではDBFlute .NET 0.8.9.20 を使用しています.
> > (DBFlute.NETの最新は 0.8.9.29 となってますが, ファイル構成など若干の変更を加えており,
> > 重要な変更でない限りバージョンを上げたくないという事情のため, そのままにしています.
> > ChangeLogでは直面している問題に対する更新が確認できませんでした).
>
> > 横山
> > yokoy...@dotshell.co.jp

Shine Yolcoyama

unread,
May 23, 2011, 2:03:23 AM5/23/11
to DBFluteユーザの集い
こんにちは、横山です

「ファイル構成など若干の変更」について

詳細はお伝えすることができないのですが、状況によってDB(PostgreSQL, Oracle)を違えたり、実装箇所によって生成言語
(Java, Csharp)を変える必要があるため、
依存情報をパラメータとして渡すことで指定のクラスが生成されるようなバッチを書いております。
そのバッチを動作させるために、dfclientを言語ごと、DBごとに配置し、その各々で _project.bat を生成させてるという状況で
す。

dfclient以下のディレクトリは構成をほぼ変更していないので、新しいバージョンを配置して少し手を加えるだけですんなり動きました。
ちなみに上記テストも、再度新しいバージョンにて行っております。

p.s.
いつもありがたく使わせていただいています
何かお役にたてれば幸いです

On 5月23日, 午前1:03, kubo <dbfl...@gmail.com> wrote:
> jfluteです。
>
> >> (DBFlute.NETの最新は 0.8.9.29 となってますが, ファイル構成など若干の変更を加えており,
> >> 重要な変更でない限りバージョンを上げたくないという事情のため, そのままにしています.
>
> ちなみに、こちらの
> 「ファイル構成など若干の変更」
> についてですが、
> 参考までにどういった要件でどういう変更をしているのか
> 教えて頂けないでしょうか?もし、DBFlute.NETに本質的に
> 必要なものなのであれば、すぐには無理だとしても将来的には
> 検討したいと思う内容かもしれないので。
>
> 2011/5/22 kubo <dbfl...@gmail.com>:
> > 2011/5/22 Shinobu Yokoyama (gmail) <yolcoy...@gmail.com>:
> >> 初めまして!
> >> 横山と申します.
>
> >> Oracle 10gで作成したViewから生成されるEntity, およびConditionBeanについて質問です.
>
> >> 通常のViewから生成されたEntityの場合, カラムに対応したメンバが生成されないのですが, これは仕様なのでしょうか?
> >> 通常のViewではなく, 実体のあるMaterialized Viewを使った場合だと, カラムに対応したメンバはEntityに追加されるようですが,
> >> それでもConditionQuery (set*GreaterEqual 等)が生成されません
> >> (CBean/CQ/BS/AbstractBs*CQ.cs で確認).
> >> Materialized View だとスキーマ(project-schema-dfclient.xml) ではTYPEがTABLEになってしまうのも疑問です.
>
> >> こちらの環境では Materialized Viewを使うことは構わないのですが,
> >> Viewに対してConditionQueryが生成されないと実装の変更が大きくなるため,
> >> 確認していただけると非常に助かります. 何卒よろしくお願いします.
>
> >> ※こちらの環境ではDBFlute .NET 0.8.9.20 を使用しています.
> >> (DBFlute.NETの最新は 0.8.9.29 となってますが, ファイル構成など若干の変更を加えており,
> >> 重要な変更でない限りバージョンを上げたくないという事情のため, そのままにしています.
> >> ChangeLogでは直面している問題に対する更新が確認できませんでした).
>
> >> 横山
> >> yokoy...@dotshell.co.jp

kubo

unread,
May 23, 2011, 2:26:02 AM5/23/11
to dbf...@googlegroups.com
jfluteです。

> テスト用にさらでサーバ(Oracle Database 10g Express Edition Release 10.2.0.1.0)をインス
> トールしたところ,
> 確かにVIEWに対応した(完全な)Entityを作成することができました. またConditionQueryのメソッドも正常に作られていまし
> た!
> しかし運用DBではなぜ取得できないのかがいまだに不明です.

おお、なんとも不思議な現象ですね...

> そこで可能であれば, VIEWのスキーマを取得するためにDBFluteが内部的に行ている処理を教えていただけないでしょうか?

実はいたって簡単で、JDBCドライバ経由では
テーブルもVIEWも区別なく情報が取得できるのです。
具体的には、DatabaseMetaDataクラスの getTables() において、
第四引数の types で TABLE に加えて VIEW を指定すると、
VIEWの情報も取得されます。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/sql/DatabaseMetaData.html

そのとき、取得されたデータの TABLE_TYPE が、
テーブルであれば TABLE だし、VIEW であれば VIEW だしと。
DBFluteでもそういう感じで情報を取得しています。
(DBFluteは、デフォルトで TABLE と VIEW が対象となる)

最新版だと、DfTableExtractor というクラスがそれに当たります。
(以前のバージョンだと DfTableHandler)
なので、そのクラスを見てみても、VIEWだから特別何かって
ことは何もないんですよね。

さらに追求するなら、JDBCドライバだけを使った
最小限の再現プログラムをあるといいかもですね。

権限が大丈夫で、VIEWも普通のVIEWなのであれば、
後は、運用DBのOracleバージョンやEditionの違いでしょうか...
(JDBCドライバは同じものを使ってるはず!?)

いずれにせよ、現時点の情報だと自分も検討つかない状態です。
OracleのJDBCドライバは中が見れないですし...
(もし、Oracleサポートがあるなら聞いてみるのもアリかと)
ただ、やはり何かしらの環境的な問題だとは思われます。

> 詳細はお伝えすることができないのですが、状況によってDB(PostgreSQL, Oracle)を違えたり、実装箇所によって生成言語
> (Java, Csharp)を変える必要があるため、
> 依存情報をパラメータとして渡すことで指定のクラスが生成されるようなバッチを書いております。
> そのバッチを動作させるために、dfclientを言語ごと、DBごとに配置し、その各々で _project.bat を生成させてるという状況で
> す。

なるほど、ありがとうございます。
かなり特殊な感じですね(パッケージ製品!?)。
そこまで使いこなしてくれるとDBFluteも幸せですね。

2011/5/23 Shine Yolcoyama <yolc...@gmail.com>:

Reply all
Reply to author
Forward
0 new messages