如何修复Grails错误:“找不到名称PrivacyOptions的域类。请重试并输入有效的域类名称”

时间:2009-08-06 23:40:51

标签: class grails dns

我刚刚开始使用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

10 个答案:

答案 0 :(得分:60)

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

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    - 伯特

答案 1 :(得分:10)

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

例如:您的projectname是Helloworld,目录是“grails-app / domain / helloworld / User.groovy”。所以,命令是“grails generate-all helloworld.User”,但不是“Helloworld.User”

答案 2 :(得分:8)

答案 3 :(得分:3)

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

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

答案 4 :(得分:1)

是的......也为我工作过。我只是将包名称作为我试图生成的类的前缀 - 所有这些都有效。所以...

generate-all racetrack.User

因为所有其他grails命令不需要包含程序包名称,因此确实存在一些裤子错误: - )

答案 5 :(得分:0)

我不知道你是如何达到这一点的,但也许this会帮助你克服困难。

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

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

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

generate-all *

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

答案 8 :(得分:0)

必须是dirname.classname。

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

它应该是:grails generate-app book.Book

答案 9 :(得分:0)

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

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