【问题标题】:Spring Data Neo4j merge different classes in one NodeEntitySpring Data Neo4j 在一个 NodeEntity 中合并不同的类
【发布时间】:2019-02-17 15:08:03
【问题描述】:

我目前正在使用 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 都存在,这取决于最后保存的是哪个实体。 Merge 似乎并没有真正合并,而是替换了实体属性。

有没有人有解决方案来合并所有属性字段而不是替换/删除它们?

【问题讨论】:

    标签: java neo4j spring-data-neo4j


    【解决方案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 本身并不使用这样的查询来进行实体合并。

    【讨论】:

    猜你喜欢
    • 2013-06-08
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 2015-07-19
    • 2016-01-05
    • 1970-01-01
    • 2011-12-26
    相关资源
    最近更新 更多