Grails 4.1.2保存Spy对象报错:非已知持久化类型
保存Spock Spy代理的Grails领域类对象失败问题
在Grails 4.1.2中,保存被Spock Spy代理的领域类对象到数据库时失败,抛出NonPersistentTypeException,错误提示:
Object [Person : (unsaved)] cannot be persisted. It is not a known persistent type.
直接创建的Person对象可以正常保存,但通过Spy生成的代理对象无法完成持久化。实际项目中,先构建带数据的Person实例,再通过personObject = Spy(personObject)生成代理,同样触发该问题,使用Gradle 5.6.4版本。
相关代码示例
领域类 grails-app/domain/Person.groovy
class Person{ String name = "" String surname = "" static mapping = { id generator: 'identity' } }
测试类 src/test/groovy/PersonSpec.groovy
import grails.testing.gorm.DataTest import spock.lang.Specification class PersonSpec extends Specification implements DataTest { def setupSpec() { mockDomain Person } def "persist person"(){ setup: Person person = new Person() when: person.save() then: true } def "persist spy"(){ setup: Person person = Spy() when: person.save() then: true } }
构建配置 build.gradle
buildscript { repositories { maven { url "https://repo.grails.org/grails/core" } } dependencies { classpath "org.grails:grails-gradle-plugin:$grailsVersion" } } repositories { maven { url "https://repo.grails.org/grails/core" } } version "0.1" group "testapp" apply plugin:"org.grails.grails-web" dependencies { compile "org.grails.plugins:hibernate5" testCompile "org.grails:grails-gorm-testing-support" }
版本配置 gradle.properties
grailsVersion=4.1.2
疑问
- 该问题是否属于预期行为?
- 有没有可行的解决办法?
- 这是否是Grails或相关组件的Bug?
内容的提问来源于stack exchange,提问作者SaySaeqo
相关产品推荐
相关产品推荐

