読者です 読者をやめる 読者になる 読者になる

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

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

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

dbflute

個人的に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系は全部未チェック状態にしないとエラーになるので注意。


※ この問題は作者様に修正して頂き、dbflute-0.9.8.3-RC2にて修正され、FKエラーがはっきりとログ出力されるようになりました。