文系プログラマによるTIPSブログ

文系プログラマ脳の私が開発現場で学んだ事やプログラミングのTIPSをまとめています。

dbfluteの罠:その2:初期データと外部キーの関係

外部キーのお話です〜


f:id:treeapps:20180418131549p:plain

個人的にS2JDBCよりdbfluteの方が好きです。ERMasterでreplace-schema.sqlを出力して、dbfluteでそれを使う。いい感じです。
しかしこのdbflute、antタスクのエラー内容が非常に解りにくい、というか全く解らない場合が多々ある気がします。そこで、今回はまった罠です。

replace-schemaタスクを実行。


[df-load-data] /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
[df-load-data] Failed to execute DBFlute Task 'ReplaceSchema'.
[df-load-data] [Advice]
[df-load-data] Check the exception messages and the stack traces.
[df-load-data] [Database Product]
[df-load-data] MySQL 5.5.11-log
[df-load-data] [JDBC Driver]
[df-load-data] MySQL-AB JDBC Driver mysql-connector-java-5.1.12 ( Revision: ${bzr.revision-id} ) for JDBC 3.0
[df-load-data] * * * * * * * * * */
[df-load-data] java.lang.NullPointerException
[df-load-data] at org.seasar.dbflute.logic.replaceschema.loaddata.impl.DfXlsDataHandlerImpl.buildRegistrationExceptionMessage(DfXlsDataHandlerImpl.java:232)
[df-load-data] at org.seasar.dbflute.logic.replaceschema.loaddata.impl.DfXlsDataHandlerImpl.doWriteDataTable(DfXlsDataHandlerImpl.java:176)
[df-load-data] at org.seasar.dbflute.logic.replaceschema.loaddata.impl.DfXlsDataHandlerImpl.doWriteDataSet(DfXlsDataHandlerImpl.java:125)
[df-load-data] at org.seasar.dbflute.logic.replaceschema.loaddata.impl.DfXlsDataHandlerImpl.writeSeveralData(DfXlsDataHandlerImpl.java:116)
[df-load-data] at org.seasar.dbflute.task.replaceschema.DfLoadDataTask.writeDbFromXls(DfLoadDataTask.java:223)
[df-load-data] at org.seasar.dbflute.task.replaceschema.DfLoadDataTask.writeDbFromXlsAsCommonData(DfLoadDataTask.java:189)
・・・以下略・・・
・・・これしかエラーメッセージが出ない。何でしょう?
うーむ。全く解らん。。。

初期データ(data.xls)を見直してみます。
あ、外部キーエラーが発生するデータが有る。これが怪しいですね。修正してみましょう。

BUILD SUCCESSFUL
Total time: 9 seconds

通りました!

あと、オフィシャルには書いてありますが、ERMaster等でreplace-schema.sqlを出力する時は、DROP系は全部未チェック状態にしないとエラーになるので注意です。