1

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

有人可以帮助我吗?

4

1 回答 1

0

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

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

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

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

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

顺便说一句,这个类,只是为了给你所有的细节,有一个用于文件上传的临时 byte[] 字段。直到现在才设置为可绑定。而且,不是为了劫持线程,而是“瞬态不再默认绑定”行为怪异,可能与我的问题有关。OP 的原始问题没有非绑定瞬态,对吧?

于 2014-01-23T01:00:16.173 回答