无法从具有 grails 复合键的域 class 中获取其余 API
Can't fetch the rest API from domain class having composite key in grails
我有这个 grails 域 class,它连接到包含复合主键的 oracle 数据库,如下所示。
每当我尝试渲染列表时,它总是会抛出此错误。你能帮帮我吗?我这两天一直在研究这个问题,但我没有解决它。?
@Resource(uri="/gender",formats = ['json','xml'])
class CGender implements Serializable {
String budYear
String genderCode
String genderNdesc
String genderEdesc
String disableFlag
String createdBy
Date createdDate
int hashCode() {
def builder = new HashCodeBuilder()
builder.append budYear
builder.append genderCode
builder.toHashCode()
}
boolean equals(other) {
if (other == null) return false
def builder = new EqualsBuilder()
builder.append budYear, other.budYear
builder.append genderCode, other.genderCode
builder.isEquals()
}
static hasMany = [CProjects: CProject]
static belongsTo = [grails.tsa.test.CYear]
static mapping = {
id composite: ["budYear", "genderCode"]
table "C_GENDER"
version false
}
static constraints = {
budYear maxSize: 7
genderCode maxSize: 2
genderNdesc maxSize: 1000
genderEdesc maxSize: 100
disableFlag maxSize: 1
createdBy maxSize: 30
}
}```
**The error which occured is below.**
```Caused by: java.lang.NullPointerException: null
at org.grails.web.converters.marshaller.json.DomainClassMarshaller.marshalObject(DomainClassMarshaller.java:141)
at org.grails.web.converters.marshaller.json.DomainClassMarshaller.marshalObject(DomainClassMarshaller.java:59)
at grails.converters.JSON.value(JSON.java:184)
at grails.converters.JSON.convertAnother(JSON.java:144)
at org.grails.web.converters.marshaller.json.CollectionMarshaller.marshalObject(CollectionMarshaller.java:41)
at org.grails.web.converters.marshaller.json.CollectionMarshaller.marshalObject(CollectionMarshaller.java:30)
at grails.converters.JSON.value(JSON.java:184)
at grails.converters.JSON.render(JSON.java:119)
at org.grails.plugins.web.rest.render.json.DefaultJsonRenderer.renderJson(DefaultJsonRenderer.groovy:116)
at org.grails.plugins.web.rest.render.json.DefaultJsonRenderer.renderJson(DefaultJsonRenderer.groovy:110)
at org.grails.plugins.web.rest.render.json.DefaultJsonRenderer.render(DefaultJsonRenderer.groovy:91)
at grails.artefact.controller.RestResponder$Trait$Helper.internalRespond(RestResponder.groovy:192)
at grails.artefact.controller.RestResponder$Trait$Helper.respond(RestResponder.groovy:62)
at grails.rest.RestfulController.index(RestfulController.groovy:62)
at grails.gorm.transactions.GrailsTransactionTemplate.doInTransaction(GrailsTransactionTemplate.groovy:94)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
at grails.gorm.transactions.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:91)
... 13 common frames omitted
我在 Grails 4.0.1 上遇到了同样的问题。这在 Grails 3.3.11 上运行良好。一个月前针对 Grails 提出了一个问题:https://github.com/grails/grails-core/issues/11450
我有这个 grails 域 class,它连接到包含复合主键的 oracle 数据库,如下所示。
每当我尝试渲染列表时,它总是会抛出此错误。你能帮帮我吗?我这两天一直在研究这个问题,但我没有解决它。?
@Resource(uri="/gender",formats = ['json','xml'])
class CGender implements Serializable {
String budYear
String genderCode
String genderNdesc
String genderEdesc
String disableFlag
String createdBy
Date createdDate
int hashCode() {
def builder = new HashCodeBuilder()
builder.append budYear
builder.append genderCode
builder.toHashCode()
}
boolean equals(other) {
if (other == null) return false
def builder = new EqualsBuilder()
builder.append budYear, other.budYear
builder.append genderCode, other.genderCode
builder.isEquals()
}
static hasMany = [CProjects: CProject]
static belongsTo = [grails.tsa.test.CYear]
static mapping = {
id composite: ["budYear", "genderCode"]
table "C_GENDER"
version false
}
static constraints = {
budYear maxSize: 7
genderCode maxSize: 2
genderNdesc maxSize: 1000
genderEdesc maxSize: 100
disableFlag maxSize: 1
createdBy maxSize: 30
}
}```
**The error which occured is below.**
```Caused by: java.lang.NullPointerException: null
at org.grails.web.converters.marshaller.json.DomainClassMarshaller.marshalObject(DomainClassMarshaller.java:141)
at org.grails.web.converters.marshaller.json.DomainClassMarshaller.marshalObject(DomainClassMarshaller.java:59)
at grails.converters.JSON.value(JSON.java:184)
at grails.converters.JSON.convertAnother(JSON.java:144)
at org.grails.web.converters.marshaller.json.CollectionMarshaller.marshalObject(CollectionMarshaller.java:41)
at org.grails.web.converters.marshaller.json.CollectionMarshaller.marshalObject(CollectionMarshaller.java:30)
at grails.converters.JSON.value(JSON.java:184)
at grails.converters.JSON.render(JSON.java:119)
at org.grails.plugins.web.rest.render.json.DefaultJsonRenderer.renderJson(DefaultJsonRenderer.groovy:116)
at org.grails.plugins.web.rest.render.json.DefaultJsonRenderer.renderJson(DefaultJsonRenderer.groovy:110)
at org.grails.plugins.web.rest.render.json.DefaultJsonRenderer.render(DefaultJsonRenderer.groovy:91)
at grails.artefact.controller.RestResponder$Trait$Helper.internalRespond(RestResponder.groovy:192)
at grails.artefact.controller.RestResponder$Trait$Helper.respond(RestResponder.groovy:62)
at grails.rest.RestfulController.index(RestfulController.groovy:62)
at grails.gorm.transactions.GrailsTransactionTemplate.doInTransaction(GrailsTransactionTemplate.groovy:94)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
at grails.gorm.transactions.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:91)
... 13 common frames omitted
我在 Grails 4.0.1 上遇到了同样的问题。这在 Grails 3.3.11 上运行良好。一个月前针对 Grails 提出了一个问题:https://github.com/grails/grails-core/issues/11450