繁体   English   中英

实现接口后,Grails域类没有setter方法

[英]Grails domain class has no setter method after implement interface

我有两个Java接口:

public interface ProductRevision {
    String getName();
    public ComponentRevision getTiedComponent();
}

public interface ComponentRevision {
    String getName();
}

然后定义两个Grails域类:

class GormProductRevision implements ProductRevision {
    String name
    GormComponentRevision tiedComponent
}

class GormComponentRevision implements ComponentRevision {
    String name
}

没有编译错误,但是当我在控制器下面调用时:

class GormProductRevisionController {
   def save() {
        GormComponentRevision gormComponentRevision = new GormComponentRevision()
        gormComponentRevision.name = 'Component'
        gormComponentRevision.save()

        GormProductRevision gormProductRevision = new GormProductRevision()
        gormProductRevision.name = 'Product'
        gormProductRevision.tiedComponent = gormComponentRevision
        gormProductRevision.save()
    }

}

它引发异常

Property 'tiedComponent' has no setter method in class 'class GormProductRevision'. Stacktrace follows:
Message: Property 'tiedComponent' has no setter method in class 'class GormProductRevision'
Line | Method
->> 2138 | setSimpleProperty in org.apache.commons.beanutils.PropertyUtilsBean
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|   1957 | setNestedProperty in     ''
|   2064 | setProperty . . . in     ''
|    858 | setProperty       in org.apache.commons.beanutils.PropertyUtils
|     31 | save . . . . . .  in GormProductRevisionController
|    195 | doFilter          in grails.plugin.cache.web.filter.PageFragmentCachingFilter
|     63 | doFilter . . . .  in grails.plugin.cache.web.filter.AbstractFilter
|    886 | runTask           in java.util.concurrent.ThreadPoolExecutor$Worker
|    908 | run . . . . . . . in     ''
^    619 | run               in java.lang.Thread

有人可以帮我吗?

(对不起,我还没有“评论”的声誉。)

我也看到了这个错误的奇怪版本。 我希望我能补充的是具体的。 但是对我来说,有时我只会看到这个问题。 我有一个实现两个接口的域类,并且都很好地进行了测试,包括在本地(Mac)计算机上向tomcat部署war。

当我将它部署在tomcat的ec2(ubuntu)中时,有时会出现此错误,有时不会。 我以为是我修改了域对象,但是在“更新”(不是“创建-放置”)中的数据源存在一些不匹配。 有一次,我删除了数据库并让它重新创建,问题就消失了。 但是我又遇到了问题,而且我已经有一段时间没有接触过该域类了。

我找到了一种解决方法:将数据源从create-drop进行更新,然后删除数据库(使用mysql或任何您的数据库客户端),然后让grails重新创建系统。 create-drop可能有问题吗? 也许。 难道是我的大脑? 绝对!

所以我不确定这是同一个问题,还是我的只是一个不同而又愚蠢的问题,但是我想补充一点,我想我也看到了类似的事情。

顺便说一句,该类仅是为了向您提供所有详细信息,它具有用于文件上传的瞬态byte []字段。 直到现在,这还没有设置为可绑定 而且,不是要劫持线程,而是“瞬态不再默认绑定”的行为很怪异,可能与我的问题有关。 OP的原始问题没有非绑定瞬态,对吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM