<div dir="ltr">久保(jflute)さん<div><br></div><div>ご確認ありがとうございます。</div><div>いただいた件ですが、以下となりました。</div><div><br></div><div>結果として、Dが関連しておきていたと推察しております。</div><div>しっかりと確認せずお手数お掛けしました・・・。</div><div>→実はxmlファイル、diffmapなどを管理対象外として</div><div> 各自のローカル管理で運用していたのですが</div><div> ここが起因して差異が発生したと判断至りました。</div><div> ※開発上、上記ファイル群の差分は</div><div>  実影響ないとして除外しておりました・・・。</div><div><br></div><div>---------------------------------------------------------</div><div><span style="color:rgb(0,0,0);font-size:14px">A. 同じ人がローカルで何度か renewal すると入れ替わる?</span><br style="color:rgb(0,0,0);font-size:14px">→私の環境下では、繰り返し同様の差分となります。</div><div><br style="color:rgb(0,0,0);font-size:14px"><span style="color:rgb(0,0,0);font-size:14px">B. 別の人が renwal すると入れ替わる?</span></div><div>→差分発生がする人/しない人がいました。</div><div> ※Dに関連としております。<br style=""><br style="color:rgb(0,0,0);font-size:14px"><span style="color:rgb(0,0,0);font-size:14px">C. FK制約の名前は固定化されています? (SYSXXXではなく)</span><br style="color:rgb(0,0,0);font-size:14px"><span style="color:rgb(0,0,0);font-size:14px"> =&gt; FK制約が関係しているかどうかの切り分け</span></div><div>→replace-schema記載上は全て命名済み、</div><div> 且つ実スキーマ上も自動命名はないことを確認しております</div><div><br style="color:rgb(0,0,0);font-size:14px"><span style="color:rgb(0,0,0);font-size:14px">D. SchemaXML (</span><span style="color:rgb(0,0,0);font-size:14px">DBFluteクライアントのschemaフォルダの下のxm<wbr>l</span><span style="color:rgb(0,0,0);font-size:14px">) も差分出てる?</span><br style="color:rgb(0,0,0);font-size:14px"><span style="color:rgb(0,0,0);font-size:14px"> =&gt; XMLの前から入れ替わってるのか、</span><span style="color:rgb(0,0,0);font-size:14px">XMLの後で入れ替わってる<wbr>のかの切り分け</span><br></div><div class="gmail_extra">→発生しない人のdiffmap、及びschemaXMLを配置し<br></div><div class="gmail_extra"> renewal実行した所、差分発生がしなくなった</div><div class="gmail_extra"><br></div><div class="gmail_extra">&gt;こちらの Oracle でのテスト環境では、<br>&gt;何度 renewal しても変わったことがないので、<br></div><div class="gmail_extra">私も運用上いままでなかったので今回のご質問に至りましたが</div><div class="gmail_extra">改めて認識不足な点等痛感しました。</div><div class="gmail_extra">お時間いただき申し訳ありませんでした。</div><div class="gmail_extra"><br></div><div class="gmail_extra">そもそも差分が発生した原因は不明です・・・が、</div><div class="gmail_extra">上記より個人のXML、diffmapが影響及ぼしたと推察しております。</div><div class="gmail_extra">(現時点で回答としては腹落ちいたしました)</div><div class="gmail_extra"><br></div><div class="gmail_extra">※引き続きご利用させていただきます!</div><div class="gmail_extra"> ありがとうございます!</div><div class="gmail_extra"><br></div><div class="gmail_extra"><br></div><div class="gmail_extra">以上、よろしくお願いいたします。</div><div class="gmail_extra">--</div><div class="gmail_extra"><br><div class="gmail_quote">2017年12月12日 11:10 kubo <span dir="ltr">&lt;<a href="mailto:dbflute@gmail.com" target="_blank">dbflute@gmail.com</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">久保(jflute)です<br>
<br>
成田さん、情報ありがとうございます。<br>
<span><br>
&gt;  * [foreign table]<br>
&gt; - *     Hoge1, Hoge2<br>
&gt; + *     Hoge2, Hoge1<br>
</span>なるほど、FKテーブルのメタデータの順序ですね。<br>
一応、プログラム的には順序を保持するようにしているのですが.<wbr>..<br>
メタデータの流れとしては以下のようになっています。<br>
<br>
1. Oracle JDBCからFK情報を取得<br>
 =&gt; DfForeignKeyExtractor<br>
 =&gt; このとき、内部的にソートし直している (immobilizeOrder()) ★ポイント<br>
<a href="https://github.com/dbflute/dbflute-core/blob/master/dbflute-engine/src/main/java/org/dbflute/logic/jdbc/metadata/basic/DfForeignKeyExtractor.java#L104" rel="noreferrer" target="_blank">https://github.com/dbflute/dbf<wbr>lute-core/blob/master/dbflute-<wbr>engine/src/main/java/org/dbflu<wbr>te/logic/jdbc/metadata/basic/D<wbr>fForeignKeyExtractor.java#L104</a><br>
<br>
2. SchemaXmlに保存<br>
 =&gt; 基本的にそのままの順序でXMLに保存<br>
<a href="https://github.com/dbflute/dbflute-core/blob/master/dbflute-engine/src/main/java/org/dbflute/logic/jdbc/schemaxml/DfSchemaXmlSerializer.java#L653" rel="noreferrer" target="_blank">https://github.com/dbflute/dbf<wbr>lute-core/blob/master/dbflute-<wbr>engine/src/main/java/org/dbflu<wbr>te/logic/jdbc/schemaxml/DfSche<wbr>maXmlSerializer.java#L653</a><br>
<br>
3. SchemaXmlを読み込んでTable.javaで保持<br>
 =&gt; XMLの順序をそのままキープ<br>
<a href="https://github.com/dbflute/dbflute-core/blob/7ff330c93ad05dc5ab7a69d28957c290989c793e/dbflute-engine/src/main/java/org/apache/torque/engine/database/model/Table.java#L1210" rel="noreferrer" target="_blank">https://github.com/dbflute/dbf<wbr>lute-core/blob/7ff330c93ad05dc<wbr>5ab7a69d28957c290989c793e/dbfl<wbr>ute-engine/src/main/java/org/a<wbr>pache/torque/engine/database/m<wbr>odel/Table.java#L1210</a><br>
<br>
※リンクはJava8版へのリンクですが、<br>
その辺のロジックはほとんど変わってないはずで。<br>
<br>
こちらの Oracle でのテスト環境では、<br>
何度 renewal しても変わったことがないので、<br>
ちょっと原因不明な状態です。<br>
(動作に支障はないにせよ、紛らわしいですよね)<br>
<br>
<br>
もし、分かれば以下の状況を教えて頂けると嬉しいです。<br>
<br>
A. 同じ人がローカルで何度か renewal すると入れ替わる?<br>
<br>
B. 別の人が renwal すると入れ替わる?<br>
<br>
C. FK制約の名前は固定化されています? (SYSXXXではなく)<br>
 =&gt; FK制約が関係しているかどうかの切り分け<br>
<br>
D. SchemaXML (DBFluteクライアントのschemaフォルダの下のxm<wbr>l) も差分出てる?<br>
 =&gt; XMLの前から入れ替わってるのか、XMLの後で入れ替わってる<wbr>のかの切り分け<br>
<br>
<br>
FK制約名を使ってないわけではないないのですが、<br>
ただ、ソートの優先度は低いのでFKカラムが変わってなければ、<br>
変わらないはずではありますが...<br>
<br>
// DfForeignKeyExtractor<br>
protected Comparator&lt;String&gt; createImmobilizedComparator(fi<wbr>nal<br>
Map&lt;String, DfForeignKeyMeta&gt; fkMap) {<br>
    return new Comparator&lt;String&gt;() {<br>
        public int compare(String o1, String o2) {<br>
            // sorted by &quot;column names + FK name&quot; (overridden default<br>
sort is by FK name)<br>
            // because FK name might be auto-generated name by DBMS,<br>
            // no change FK but generated classes might be changed<br>
after ReplaceSchema<br>
            // (basically FK name should be named fixedly...)<br>
            // so uses local column names as first key here<br>
            final DfForeignKeyMeta meta1 = fkMap.get(o1);<br>
            final DfForeignKeyMeta meta2 = fkMap.get(o2);<br>
            final Map&lt;String, String&gt; columnNameMap1 =<br>
meta1.getColumnNameMap(); // the map is sorted<br>
            final Map&lt;String, String&gt; columnNameMap2 = meta2.getColumnNameMap();<br>
            final String exp1 =<br>
Srl.connectByDelimiter(columnN<wbr>ameMap1.keySet(), &quot;/&quot;) + &quot;,&quot; + o1;<br>
            final String exp2 =<br>
Srl.connectByDelimiter(columnN<wbr>ameMap2.keySet(), &quot;/&quot;) + &quot;,&quot; + o2;<br>
            return exp1.compareTo(exp2);<br>
        }<br>
    };<br>
<div class="m_1623373337963147822gmail-m_3708856925671805872m_8998536757079006799HOEnZb"><div class="m_1623373337963147822gmail-m_3708856925671805872m_8998536757079006799h5">}<br>
______________________________<wbr>_________________<br>
Seasar-user mailing list<br>
<a href="mailto:Seasar-user@ml.seasar.org" target="_blank">Seasar-user@ml.seasar.org</a><br>
<a href="https://ml.seasar.org/mailman/listinfo/seasar-user" rel="noreferrer" target="_blank">https://ml.seasar.org/mailman/<wbr>listinfo/seasar-user</a><br>
</div></div></blockquote></div><br></div></div>