grails - 使用 Grails、GORM 和 neo4j 的关系类进行自引用多对多
问题描述
我有一个具有自引用多对多的 Grails 域类:
class ModelElement {
String name
String elementType
String modelType
String description
String toolIdentifier
static hasMany = [
relatedFrom: ModelElement,
relatedTo: ModelElement
]
static mappedBy = [
relatedFrom: 'relatedTo',
relatedTo: 'relatedFrom'
]
static mapping = {
id generator: 'assigned',
name: 'toolIdentifier'
}
static constraints = {
description nullable:true
}
}
我想使用如下关系类映射neo4j中的关系:
import grails.neo4j.Relationship
class ModelRelationship implements Relationship<ModelElement, ModelElement> {
String name
String relationshipType
String modelType
String description
String toolIdentifier
static constraints = {
name nullable:true
description nullable:true
}
}
当我尝试这段代码时:
def element1 = new ModelElement(
name: 'Test Name 1',
modelType: "Archimate",
elementType: "Assessment",
toolIdentifier: 'A123').save()
def element2 = new ModelElement(
name: 'Test Name 2',
modelType: "Archimate",
elementType: "Assessment",
toolIdentifier: 'Z456').save()
def relationship = new ModelRelationship(
modelType: "Archimate",
relationshipType: "Association",
toolIdentifier: 'Z456',
from: element1,
to: element2).save()
我得到如下所示的异常。我还尝试将relatedFrom 和relatedTo 属性更改为ModelRelationship 类型,但是这会为mappedBy 创建一个映射错误,因为ModelRelationship 上不存在这些属性。
有任何想法吗?
org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'me.yellek.adtf.model.ModelRelationship' with class 'org.grails.datastore.mapping.keyvalue.mapping.config.KeyValuePersistentEntity' to class 'org.grails.datastore.gorm.neo4j.RelationshipPersistentEntity'
at grails.neo4j.Relationship$Trait$Helper.type(Relationship.groovy:44)
at grails.neo4j.Relationship$Trait$Helper.getType(Relationship.groovy:53)
at grails.neo4j.Relationship$Trait$Helper.hashCode(Relationship.groovy:84)
at java.base/java.util.HashMap.hash(HashMap.java:340)
at java.base/java.util.HashMap.put(HashMap.java:612)
at java.base/java.util.HashSet.add(HashSet.java:221)
at grails.gorm.validation.PersistentEntityValidator.validate(PersistentEntityValidator.groovy:68)
at org.grails.datastore.gorm.GormValidationApi.doValidate(GormValidationApi.groovy:124)
at org.grails.datastore.gorm.GormValidationApi.validate(GormValidationApi.groovy:153)
at org.grails.datastore.gorm.GormValidateable$Trait$Helper.validate(GormValidateable.groovy:71)
at org.grails.datastore.gorm.GormInstanceApi.doSave(GormInstanceApi.groovy:333)
at org.grails.datastore.gorm.GormInstanceApi.save_closure5(GormInstanceApi.groovy:180)
at groovy.lang.Closure.call(Closure.java:412)
at org.grails.datastore.mapping.core.DatastoreUtils.execute(DatastoreUtils.java:319)
at org.grails.datastore.gorm.AbstractDatastoreApi.execute(AbstractDatastoreApi.groovy:40)
at org.grails.datastore.gorm.GormInstanceApi.save(GormInstanceApi.groovy:179)
at org.grails.datastore.gorm.GormInstanceApi.save(GormInstanceApi.groovy:119)
at org.grails.datastore.gorm.GormEntity$Trait$Helper.save(GormEntity.groovy:100)
at me.yellek.adtf.model.ModelRelationshipSpec.test basic relationship mapping(ModelRelationshipSpec.groovy:30)
解决方案
推荐阅读
- java - (Android) 使用 HttpUrlConnection 编写 curl POST 命令
- r - 根据条件将值分配给数据框中的特定行和多列
- dictionary - Octave:创建和初始化结构的简洁方法
- asp.net - 单元测试失败时如何通过dockerfile停止构建(Dockerfile + .NET Framework + Nunit Test + Docker Window Container
- javascript - 保存状态中的Div内容
- javascript - 如何在用户输入上设置计时器?
- sql - BIGQUERY - LEFT OUTER JOIN 不能在没有连接两侧的字段相等的条件下使用
- apache-kafka - 在 Kafka-Python 中流式传输 CSV 数据
- javascript - 将字段文本添加到
在 .change() 之后使用 jquery
- r - 在 r 中绘制对 MCQ 的多个响应