【问题标题】:How can I fix Grails error: "No domain class found for name PrivacyOptions. Please try again and enter a valid domain class name"如何修复 Grails 错误:“找不到名称 PrivacyOptions 的域类。请重试并输入有效的域类名称”
【发布时间】:2010-11-17 13:06:55
【问题描述】:

我刚刚开始使用 Groovy/Grails。

我在我的项目中添加了一个新的域控制器,而 generate-controller 不喜欢它。

还有其他迹象表明出了点问题:如果我运行该应用程序,实际上并没有为此在数据库中创建表。

我已将 DomainController 简化为一个 String 字段并且没有任何约束,只是为了确保我的规范没有问题。我还尝试重命名它,以防万一原始名称(隐私)与某些内容发生冲突。

我确定我的名称是正确的,该文件名为 PrivacyOptions.groovy,在类中也称为 PrivacyOptions。

这是错误:

Running script /opt/local/grails/scripts/GenerateController.groovy
Environment set to development
Domain class not found in grails-app/domain, trying hibernate mapped classes...
No domain class found for name PrivacyOptions. Please try again and enter a valid domain class name

【问题讨论】:

  • 我遇到了类似的问题。我需要在调用“grails generate-all packagename.domain”时包含包名

标签: class grails dns


【解决方案1】:

在模型名称之前添加项目名称(也就是模型文件第一行的包名称)。

grails generate-all projectname.Class

经过一个小时的挠头和谷歌搜索,这终于对我有用了。

参考:http://grails.1312388.n4.nabble.com/Generate-Scaffold-Scripts-Don-t-Work-Getting-No-domain-class-found-Error-td2017858.html#a2017880

从 1.2.2 开始,Grails 在默认为您的包中创建工件 项目名称 - 见http://jira.codehaus.org/browse/GRAILS-5713 所以你需要运行grails generate-all srapp.Srmodel - 伯特

【讨论】:

  • 如果您处于交互模式,在输入 generate-all 后,点击选项卡,它应该会自动填充您的包名称并显示可能使用的类。节省一些打字和记忆。
  • 自从我发布它以来的三年里,我无法完全理解有多少人为此绊倒并支持它。这是我第一次也是最后一次接触 grails,因为此时我对 grails 作为平台失去了信心。非常感谢大家的代表:-)
  • 当 SO 搜索没有帮助时,我进行了 Google 搜索并弹出了这个。救了我问一个重复的问题!像魅力一样工作。
【解决方案2】:

它不是 projectname.Class ,它必须是 dirname.classname 。

例如:你的项目名称是 Helloworld,目录是 "grails-app/domain/helloworld/User.groovy" 。所以,命令是“grails generate-all helloworld.User”,而不是“Helloworld.User”

【讨论】:

    【解决方案3】:

    【讨论】:

      【解决方案4】:

      帮助很大。我在this tutorial 之后遇到了同样的问题,将项目命名为“trip-planner”,Grails 将域目录生成为“~/trip/planner/”而不是“~/trip-planner/”。那么 Trip 类的 generate-all 命令应该是 'grails generate-all tr​​ip.planner.Trip'

      以防万一有人在项目名称中添加“-”字符。

      【讨论】:

        【解决方案5】:

        是的……也为我工作。我只是将包名称添加到我试图为其生成的类的前面,它起作用了。所以...

        生成所有racetrack.User

        确实有点裤子错误,因为所有其他 grails 命令都不需要包含包名称:-))

        【讨论】:

          【解决方案6】:

          我不知道你是怎么走到这一步的,但也许this 会帮助你克服困难。

          假设您使用“grails create-domain-class”创建 PrivacyOptions 域对象,并且 Groovy 脚本出现在您的 grails-app/domain 目录中,我是否正确?您是否在测试/单元中获得了 PrivacyOptionsTests ?那通过了吗?你添加了一个包吗?

          【讨论】:

          • 我是从 NetBeans IDE 完成的。我认为问题在于,当我创建文件时,我选择了“创建一个 groovy 类”选项而不是“创建一个域类”选项。我猜某个秘密配置文件中的某个地方是域类的列表,并且 create-domain-class 进行了必要的内务管理。
          • 是的,create-domain-class 是关键。
          • Groovy 文件必须位于 grails-app/domain 文件夹中。没有秘密配置文件
          • @Scott Warren - 这是不正确的。我在 grails-app/domain 文件夹中有域,并且由于不使用 create-domain-class 而遇到了同样的问题
          • Grails Docs. 见底部附近“请注意,此命令只是为了方便,如果您愿意,您也可以在您喜欢的文本编辑器或 IDE 中创建域类。”
          【解决方案7】:

          由于缺少属性而导致堆栈跟踪不清楚的相关问题:

          http://jira.codehaus.org/browse/GRAILS-1607

          【讨论】:

            【解决方案8】:

            generate-all Domainname 将不起作用,因为需要完整的包名称。 我打算第一次添加一个 *,然后你会看到域类在其他调用中应该是什么样子。

            generate-all *
            

            http://grails.org/doc/latest/ref/Command%20Line/generate-all.html

            【讨论】:

              【解决方案9】:

              它必须是 dirname.classname。

              如果你有一个域类创建书,像这样'grails-app/domain/book/Book.groovy'

              应该是:grails generate-app book.Book

              【讨论】:

                【解决方案10】:

                如果您正在使用 Groovy/Grails Tool Suite,您可以通过右键单击您创建的控制器来查看域名,注意域名的确切大小写,然后右键单击视图并生成视图并输入域名.viewname

                例如,您的控制器名称是 RegistrationController,域名是 helloworld,您可以右键单击视图并在生成视图对话框中输入值 helloworld.Registration

                【讨论】:

                  猜你喜欢
                  • 2011-09-14
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-07-25
                  • 2019-05-23
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-02-21
                  相关资源
                  最近更新 更多