【问题标题】:Grails/GORM: No signature of method is is applicable for argument typesGrails/GORM:没有方法签名适用于参数类型
【发布时间】:2015-02-13 01:10:36
【问题描述】:

我正在尝试使用 Grails 2.4.4 组合一个基本的博客应用程序。我的领域模型如下:

class Commentable {
  String title
  static hasMany = [comments:Comment]   
}

class Comment extends Commentable {
  static belongsTo = [target:Commentable]
}

class Post extends Commentable {
  static hasMany = [tags:Tag]
}

class Tag {
  String label
  static hasMany = [posts:Post]
  static belongsTo = Post
}

在 BootStrap.groovy 的 init 方法中,我尝试创建一个 Post 和一个 Tag,如下所示

def post = new Post();
post.setTitle("Post1");
post.save();

def tag = new Tag();
tag.setLabel("Tag1");
tag.save();

tag.addToPost(post);
tag.save();

产生以下错误信息:

Message: No signature of method: io.dimitris.blog.Tag.addToPost() is 
applicable for argument types: (io.dimitris.blog.Post) values: 
[io.dimitris.blog.Commentable : 1]
Possible solutions: addToPosts(java.lang.Object)

任何关于我做错了什么的提示将不胜感激。

【问题讨论】:

  • Possible solutions: addToPosts(java.lang.Object)addToPosts() 而不是 addToPost()
  • 与问题无关 - 使用 map 构造函数而不是 Java 风格的单独 setter 调用,您的代码可以更加简洁,并且可以选择利用在 addToXXX 中省略构造函数的选项:@ 987654328@ 后跟 tag.save()。不需要其他 save() 调用。

标签: grails grails-orm


【解决方案1】:

您正在呼叫tag.addToPost(post),但您需要tag.addToPosts(post)hasMany 属性是 static hasMany = [posts:Post]。该映射中的键指示方法名称。如果你把它改成static hasMany = [post:Post],那么方法就是addToPost(post),但是这个名字就没有意义了。

【讨论】:

  • 成功了 - 谢谢!我似乎被自动完成部分误导了。在 GGTS 的 3.6.3.SR1 版本中,我仍然收到 addToPost(...) 的自动完成建议,但 addToPosts(...) 没有。我理解为什么 addToPosts 没有出现,但是,我不清楚 addToPost 来自哪里 - 但我想这是一个完全不同的问题。再次感谢!
猜你喜欢
  • 1970-01-01
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 2017-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多