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

时间:2013-07-30 08:12:35

标签: grails gorm

我有两个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

有人能帮助我吗?

1 个答案:

答案 0 :(得分:0)

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

我也看到了这个bug的奇怪版本。我希望我能添加的是具体的。但对我来说,我有时只看到这个问题。我有一个实现两个接口的域类,并且所有接口都很好,包括在我的本地(Mac)机器上部署一个war到tomcat。

当我在tomcat上的ec2(ubuntu)中部署它时,有时会发生此错误,有时不会。我以为是我修改了域对象但是在'update'(而不是'create-drop')中的数据源存在一些不匹配。有一次我放弃了数据库,让它重新创建,问题就消失了。但我再次看到问题,我有一段时间没有触及该域类。

我找到了一个解决方法:从create-drop获取数据源更新,然后删除数据库(使用mysql或任何数据库客户端),然后让grails重新创建系统。在create-drop中可能存在问题吗?也许。这可能是我的大脑吗?绝对!

所以我不确定这是同一个问题,或者我的只是一些不同而且愚蠢的东西,但我想补充一点,我想我也看到了类似的东西。

BTW,这个类只是为了给你提供所有细节,它有一个用于文件上传的瞬态byte []字段。直到现在,它才被设置为 bindable 。而且,不要劫持线程,但“瞬态不再受默认约束”行为奇怪,可能与我的问题有关。 OP的原始问题没有非约束瞬态,对吗?