Spring Data Neo4j在一个NodeEntity中合并不同的类

时间:2018-09-12 22:20:42

标签: java neo4j spring-data-neo4j

我目前正在使用spring-data-neo4j(当前版本)开发一个项目,并且在尝试将两个类及其属性合并到一个NodeEntity时遇到问题。 这是我的两节课:

@NodeEntity(label = "entity")
public class Ent1 {
    @Id
    @Index(unique = true)
    private Integer id;

    private Integer data1;
}

@NodeEntity(label = "entity")
public class Ent2 {
    @Id
    @Index(unique = true)
    private Integer id;

    private Integer data2;
}

通过定义以@Index注释的id属性,SDN会进行合并,而不是插入具有相同索引的多个节点。

我想要实现的是,如果我保存一个Ent1实例,然后再保存另一个与Ent1实体具有相同ID的Ent2实例,则这两个数据属性都应该出现在结果节点中。它们应该合并。

实际上存在data1或data2,具体取决于最后保存哪个实体。合并似乎并没有真正合并,而是替换了实体属性。

有人可以合并所有属性字段而不是替换/删除它们吗?

1 个答案:

答案 0 :(得分:1)

我刚刚使用自定义密码查询解决了我的问题。如果有人也遇到这样的问题,那么这里是上述问题抽象的解决方案。

@Query("MERGE (e:entity{id:{ent1}.id}) SET e.data1 = {ent1}.data1"
void saveEnt1(@Param("ent1") Ent1 ent1);

@Query("MERGE (e:entity{id:{ent2}.id}) SET e.data2 = {ent2}.data2"
void saveEnt2(@Param("ent2") Ent2 ent2);

不幸的是,SDN本身并不将这种查询用于实体合并。