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では直面している問題に対する更新が確認できませんでした).
こちらこそ初めまして、横山さん
そして、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 からこのグループにアクセスしてください。
>
>
>> (DBFlute.NETの最新は 0.8.9.29 となってますが, ファイル構成など若干の変更を加えており,
>> 重要な変更でない限りバージョンを上げたくないという事情のため, そのままにしています.
ちなみに、こちらの
「ファイル構成など若干の変更」
についてですが、
参考までにどういった要件でどういう変更をしているのか
教えて頂けないでしょうか?もし、DBFlute.NETに本質的に
必要なものなのであれば、すぐには無理だとしても将来的には
検討したいと思う内容かもしれないので。
2011/5/22 kubo <dbf...@gmail.com>:
> テスト用にさらでサーバ(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>: