exception - 域类的Grails软件包更改导致DuplicateMappingException

标签 exception grails import duplicates mappings

在学习教程以开始学习Grails时,我犯了一个错误并运行:

grails create-domain-class com.FooBar

代替:
grails create-domain-class com.acme.FooBar

显而易见,我犯了一个错误,因此尝试了以下操作:
  • 搜索了一个与create-domain-class命令相反的函数,似乎没有一个。
  • 在网络上搜索建议,共识是您可以删除域类文件,任何关联的 View 和测试,然后为了安全起见,请在项目目录中对您的类名称进行文本搜索,以查找您可能错过的所有引用。我都做完了
  • 然后我运行正确的命令来创建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”解决方案。

    谢谢。

    最佳答案

    你不应该那样做

    static mapping = {
            autoImport false
        }
    

    因此,您说过不要仅按名称检查域,也要查找软件包。因此,一旦这样做,您将不得不在查询/ hqls中使用类的完全限定名称,这有时会发痒。

    您应该完全删除域,即

    1. remove the Domain
    2. remove the view folder creating by default with very same name and so do the controller
    3. Now, do grails clean-all(Make it a thumb rule to use grails clean-all first for any issue unexpectedly occuring).
    4. To be more accurate do remove target directory from your project and then do run grails run-app.


    我做了很多相同的事情,并通过上述步骤解决了它。

    希望能帮助到你。

    关于exception - 域类的Grails软件包更改导致DuplicateMappingException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33389859/

    相关文章:

    python - 使用python的for循环API响应中的错误处理

    Java 自定义异常处理

    grails - 将 SQL 查询转换为 Grails

    grails - 在Grails中将.list()与其他查询选项一起使用

    github - 如何从 Google Colab 的 Github 存储库导入自定义模块?

    vba - 在不打开文件的情况下从多个工作簿复制范围

    java - JavaFX 应用程序中出现意外的 ArrayIndexOutOfBoundsException,未引用任何数组

    Python:无法打开文件进行读取

    javascript - Grails 从 1.4.0 降级到 1.3.7 并破坏了 jQuery 插件

    mysql - 将 Microsoft SQL (.MDF) 文件中的数据导入 MySQL