猿问

在 Neo4J Spring Boot OGM 上的关系实体中保存子类或数组列表

我有一个关于如何在关系实体中保存子类或 ArrayList 的查询?


我的问题:当我将数据从存储库传递给 save 调用以将 Child 作为 Parent 的一部分保存时,没有问题或错误,但是当我在数据库中检索或查找时,没有数据存在。


家长班:


@RelationshipEntity(type = "HAS_DATA")

public class Parent{


private Long id;


private Long sequenceId;


Set<Child> = new HashSet<>();


@StartNode

SomeClass1 someClass1;


@EndNode

SomeClass2 someClass2;


//Getter and Setters

}

儿童班:


public class Child{


Long Id;


String name;


//Getters and Setters

}

我如何实现这一目标?


倚天杖
浏览 135回答 2
2回答

森栏

看看AttributeConverter注释,但是如果您需要关系上的值集合,请考虑重构您的模型,使其成为具有相关内容的节点。例子:这是一个示例属性转换器(在 Kotlin 中),它在 Neo4j 中将字符串数组属性转换为/从字符串数组属性转换为 Java 类型。class RoleArrayAttributeConverter : AttributeConverter<Array<Role>, Array<String>>{&nbsp; &nbsp; override fun toEntityAttribute(value: Array<String>): Array<Role>&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; return value.map { Role.valueOf(it) }.toTypedArray()&nbsp; &nbsp; }&nbsp; &nbsp; override fun toGraphProperty(value: Array<Role>): Array<String>&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; return value.map { it.toString() }.toTypedArray()&nbsp; &nbsp; }}

斯蒂芬大帝

根据@Jasper Blues 的建议,我用 Java 创建了自己的转换器。回答我自己的问题,因为我无法在评论中添加这个。public class ChildConverter implements AttributeConverter<Set<Child>, String> {ObjectMapper mapper = new ObjectMapper();@Overridepublic String toGraphProperty(Set<Child> data) {&nbsp; &nbsp; String value = "";&nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; value = mapper.writeValueAsString(data);&nbsp; &nbsp; } catch (JsonProcessingException e) {&nbsp; &nbsp; &nbsp; &nbsp; e.printStackTrace();&nbsp; &nbsp; }&nbsp; &nbsp; return value;}@Overridepublic Set<Child> toEntityAttribute(String data) {&nbsp; &nbsp; Set<Child> mapValue = new HashSet<Child>();&nbsp; &nbsp; TypeReference<Set<Child>> typeRef = new TypeReference<Set<Child>>() {&nbsp; &nbsp; };&nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; mapValue = mapper.readValue(data, typeRef);&nbsp; &nbsp; } catch (IOException e) {&nbsp; &nbsp; &nbsp; &nbsp; e.printStackTrace();&nbsp; &nbsp; }&nbsp; &nbsp; return mapValue;}}确保在父类中添加@Convert 注解。&nbsp;@Convert(converter = ChildConverter.class)&nbsp;Set<Child> = new HashSet<>();
随时随地看视频慕课网APP

相关分类

Java
我要回答