域类的Grails包更改导致DuplicateMappingException
在学习Grails的教程中,我犯了一个错误并运行了:域类的Grails包更改导致DuplicateMappingException,exception,grails,import,duplicates,mappings,Exception,Grails,Import,Duplicates,Mappings,在学习Grails的教程中,我犯了一个错误并运行了: grails create-domain-class com.FooBar 而不是: grails create-domain-class com.acme.FooBar 很明显,我犯了一个错误,因此我尝试了以下方法: 在搜索一个反转createdomain类命令的函数时,似乎没有 在web上搜索建议,共识是您可以删除域类文件、任何关联的视图和测试,然后为了安全起见,在项目目录中对您的类名进行文本搜索,查找您可能遗漏的任何引用。这一切我都
grails create-domain-class com.FooBar
而不是:
grails create-domain-class 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
}
正如你们所说的,通过这样做,你们不需要仅仅通过名称来检查域名,也可以查找包。因此,一旦您这样做,您将不得不在查询/HQL中使用类的完全限定名,这有时可能会让人感到不舒服
您应该完全删除该域,即
希望有帮助。我会删除
autoImport
并尝试运行grails clean
。感谢Joshua,删除了autoImport
,然后运行grails clean
,它成功了!在教程介绍这个基本命令之前遇到了我的问题。谢谢Vinay,删除了autoImport
,然后运行grails clean
,它成功了!在教程介绍此基本命令之前遇到我的问题。请不要提及!不过,在grails clean证明是徒劳的情况下,我们建议使用grails clean all。