1

Grails の学習を開始するためのチュートリアルに取り組んでいるときに、間違えて次のように実行しました。

grails create-domain-class com.FooBar

それ以外の:

grails create-domain-class com.acme.FooBar

エラーが発生したことがすぐに明らかになったので、次のことを試しました。

  1. create-domain-class コマンドを逆にする関数を検索しましたが、ないようです。
  2. Web でアドバイスを検索したところ、コンセンサスは、ドメイン クラス ファイル、関連するビューとテストを削除してから、プロジェクト ディレクトリでクラス名のテキスト検索を安全に実行して、見逃した可能性のある参照がないかどうかを確認することです。私はこれをすべてやりました。
  3. 次に、正しいコマンドを実行して com.acme.FooBar を作成しましたが、うまくいきました。

この後、アプリは実行に失敗し、次のエラーが報告されます。

org.hibernate.DuplicateMappingException: duplicate import: FooBar refers to both com.acme.FooBar and com.FooBar (try using auto-import="false")

次のコードを com.acme.FooBar に追加した後:

...
static mapping = {
    autoImport false
}
...

アプリが期待どおりに実行されるようになりました。

ただし、時々パッケージをリファクタリングする経験豊富な Java 開発者として、DuplicateMappingException を発生させたり、「autoImport false」ソリューションに頼ったりせずにそれを行う方法を理解したいと思います。

ありがとう。

4

1 に答える 1

2

やってはいけない

static mapping = {
        autoImport false
    }

これを行うことで、名前だけでドメインをチェックせず、パッケージも検索すると言いました。したがって、それを行うと、クエリ/ hqls でクラスの完全修飾名を使用する必要があり、時々かゆくなることがあります。

ドメインを完全に削除する必要があります。

  1. ドメインを削除する
  2. デフォルトで非常に同じ名前で作成するビューフォルダーを削除し、コントローラーも削除します
  3. 次に、grails clean-all を実行します (予期しない問題が発生した場合は、最初に grails clean-all を使用することを経験則にします)。
  4. より正確に言うと、プロジェクトからターゲット ディレクトリを削除してから、grails run-app を実行してください。

私は何度も同じことをしましたが、上記の手順で解決しました。

それが役に立てば幸い。

于 2015-10-28T13:30:03.053 に答える