[Seasar-user:22154] Re: 【DBFlute】自動生成クラスの挙動について

Nari trickster.m.3 @ gmail.com
2017年 12月 12日 (火) 14:55:31 JST


久保(jflute)さん

ご確認ありがとうございます。
いただいた件ですが、以下となりました。

結果として、Dが関連しておきていたと推察しております。
しっかりと確認せずお手数お掛けしました・・・。
→実はxmlファイル、diffmapなどを管理対象外として
各自のローカル管理で運用していたのですが
ここが起因して差異が発生したと判断至りました。
※開発上、上記ファイル群の差分は
実影響ないとして除外しておりました・・・。

---------------------------------------------------------
A. 同じ人がローカルで何度か renewal すると入れ替わる?
→私の環境下では、繰り返し同様の差分となります。

B. 別の人が renwal すると入れ替わる?
→差分発生がする人/しない人がいました。
※Dに関連としております。

C. FK制約の名前は固定化されています? (SYSXXXではなく)
=> FK制約が関係しているかどうかの切り分け
→replace-schema記載上は全て命名済み、
且つ実スキーマ上も自動命名はないことを確認しております

D. SchemaXML (DBFluteクライアントのschemaフォルダの下のxml) も差分出てる?
=> XMLの前から入れ替わってるのか、XMLの後で入れ替わってるのかの切り分け
→発生しない人のdiffmap、及びschemaXMLを配置し
renewal実行した所、差分発生がしなくなった

>こちらの Oracle でのテスト環境では、
>何度 renewal しても変わったことがないので、
私も運用上いままでなかったので今回のご質問に至りましたが
改めて認識不足な点等痛感しました。
お時間いただき申し訳ありませんでした。

そもそも差分が発生した原因は不明です・・・が、
上記より個人のXML、diffmapが影響及ぼしたと推察しております。
(現時点で回答としては腹落ちいたしました)

※引き続きご利用させていただきます!
ありがとうございます!


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

2017年12月12日 11:10 kubo <dbflute @ gmail.com>:

> 久保(jflute)です
>
> 成田さん、情報ありがとうございます。
>
> >  * [foreign table]
> > - *     Hoge1, Hoge2
> > + *     Hoge2, Hoge1
> なるほど、FKテーブルのメタデータの順序ですね。
> 一応、プログラム的には順序を保持するようにしているのですが...
> メタデータの流れとしては以下のようになっています。
>
> 1. Oracle JDBCからFK情報を取得
> => DfForeignKeyExtractor
> => このとき、内部的にソートし直している (immobilizeOrder()) ★ポイント
> https://github.com/dbflute/dbflute-core/blob/master/dbflute-
> engine/src/main/java/org/dbflute/logic/jdbc/metadata/basic/D
> fForeignKeyExtractor.java#L104
>
> 2. SchemaXmlに保存
> => 基本的にそのままの順序でXMLに保存
> https://github.com/dbflute/dbflute-core/blob/master/dbflute-
> engine/src/main/java/org/dbflute/logic/jdbc/schemaxml/DfSche
> maXmlSerializer.java#L653
>
> 3. SchemaXmlを読み込んでTable.javaで保持
> => XMLの順序をそのままキープ
> https://github.com/dbflute/dbflute-core/blob/7ff330c93ad05dc
> 5ab7a69d28957c290989c793e/dbflute-engine/src/main/java/org/a
> pache/torque/engine/database/model/Table.java#L1210
>
> ※リンクはJava8版へのリンクですが、
> その辺のロジックはほとんど変わってないはずで。
>
> こちらの Oracle でのテスト環境では、
> 何度 renewal しても変わったことがないので、
> ちょっと原因不明な状態です。
> (動作に支障はないにせよ、紛らわしいですよね)
>
>
> もし、分かれば以下の状況を教えて頂けると嬉しいです。
>
> A. 同じ人がローカルで何度か renewal すると入れ替わる?
>
> B. 別の人が renwal すると入れ替わる?
>
> C. FK制約の名前は固定化されています? (SYSXXXではなく)
> => FK制約が関係しているかどうかの切り分け
>
> D. SchemaXML (DBFluteクライアントのschemaフォルダの下のxml) も差分出てる?
> => XMLの前から入れ替わってるのか、XMLの後で入れ替わってるのかの切り分け
>
>
> FK制約名を使ってないわけではないないのですが、
> ただ、ソートの優先度は低いのでFKカラムが変わってなければ、
> 変わらないはずではありますが...
>
> // DfForeignKeyExtractor
> protected Comparator<String> createImmobilizedComparator(final
> Map<String, DfForeignKeyMeta> fkMap) {
>     return new Comparator<String>() {
>         public int compare(String o1, String o2) {
>             // sorted by "column names + FK name" (overridden default
> sort is by FK name)
>             // because FK name might be auto-generated name by DBMS,
>             // no change FK but generated classes might be changed
> after ReplaceSchema
>             // (basically FK name should be named fixedly...)
>             // so uses local column names as first key here
>             final DfForeignKeyMeta meta1 = fkMap.get(o1);
>             final DfForeignKeyMeta meta2 = fkMap.get(o2);
>             final Map<String, String> columnNameMap1 =
> meta1.getColumnNameMap(); // the map is sorted
>             final Map<String, String> columnNameMap2 =
> meta2.getColumnNameMap();
>             final String exp1 =
> Srl.connectByDelimiter(columnNameMap1.keySet(), "/") + "," + o1;
>             final String exp2 =
> Srl.connectByDelimiter(columnNameMap2.keySet(), "/") + "," + o2;
>             return exp1.compareTo(exp2);
>         }
>     };
> }
> _______________________________________________
> Seasar-user mailing list
> Seasar-user @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
URL: <http://ml.seasar.org/archives/seasar-user/attachments/20171212/c9cfb3b9/attachment.html>


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